亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

Apache Mina通信框架架構(gòu)與應(yīng)用

2019-11-10 20:10:45
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Apache Mina Server 是一個(gè)網(wǎng)絡(luò)通信應(yīng)用框架,也就是說(shuō),它主要是對(duì)基于 TCP/ip、UDP/IP協(xié)議棧的通信框架(當(dāng)然,也可以提供 java 對(duì)象的序列化服務(wù)、虛擬機(jī)管道通信服務(wù)等),Mina 可以幫助我們快速開(kāi)發(fā)高性能、高擴(kuò)展性的網(wǎng)絡(luò)通信應(yīng)用,Mina 提供了事件驅(qū)動(dòng)、異步(Mina 的異步 IO 默認(rèn)使用的是 JAVA NIO 作為底層支持)操作的編程模型。從官網(wǎng)文檔“MINA based application Architecture”中可以看到Mina作為一個(gè)通信層框架,在實(shí)際應(yīng)用所處的位置,如圖所示:apparch_smallMina位于用戶應(yīng)用程序和底層Java網(wǎng)絡(luò)API(和in-VM通信)之間,我們開(kāi)發(fā)基于Mina的網(wǎng)絡(luò)應(yīng)用程序,就無(wú)需關(guān)心復(fù)雜的通信細(xì)節(jié)。

應(yīng)用整體架構(gòu)

再看一下,Mina提供的基本組件,如圖所示:mina_app_arch也就是說(shuō),無(wú)論是客戶端還是服務(wù)端,使用Mina框架實(shí)現(xiàn)通信的邏輯分層在概念上統(tǒng)一的,即包含如下三層:

I/O Service – Performs actual I/OI/O Filter Chain – Filters/Transforms bytes into desired Data Structures and vice-versaI/O Handler – Here resides the actual business logic

想要開(kāi)發(fā)基于MIna的應(yīng)用程序,你只需要做如下事情:

Create an I/O service – Choose from already available Services (*Acceptor) or create your ownCreate a Filter Chain – Choose from already existing Filters or create a custom Filter for transforming request/responseCreate an I/O Handler – Write business logic, on handling different messages

下面看一下使用Mina的應(yīng)用程序,在服務(wù)器端和客戶端的架構(gòu)細(xì)節(jié):

服務(wù)器端架構(gòu)服務(wù)器端監(jiān)聽(tīng)指定端口上到來(lái)的請(qǐng)求,對(duì)這些請(qǐng)求經(jīng)過(guò)處理后,回復(fù)響應(yīng)。它也會(huì)創(chuàng)建并處理一個(gè)鏈接過(guò)來(lái)的客戶會(huì)話對(duì)象(session)。服務(wù)器端架構(gòu)如圖所示:Server_arch對(duì)服務(wù)器端的說(shuō)明,引用官網(wǎng)文檔,如下所示:

IOAcceptor listens on the network for incoming connections/packetsFor a new connection, a new session is created and all subsequent request from IP Address/Port combination are handled in that SessionAll packets received for a Session, traverses the Filter Chain as specified in the diagram. Filters can be used to modify the content of packets (like converting to Objects, adding/removing information etc). For converting to/from raw bytes to High Level Objects, PacketEncoder/Decoder are particularly usefulFinally the packet or converted object lands in IOHandler. IOHandlers can be used to fulfill business needs.

客戶端架構(gòu)客戶端主要做了如下工作:

連接到服務(wù)器端向服務(wù)器發(fā)送消息等待服務(wù)器端響應(yīng),并處理響應(yīng)

客戶端架構(gòu),如圖所示:clientdiagram對(duì)客戶端架構(gòu)的說(shuō)明,引用官網(wǎng)文檔內(nèi)容,如下所示:

Client first creates an IOConnector (MINA Construct for connecting to Socket), initiates a bind with ServerUpon Connection creation, a Session is created and is associated with ConnectionApplication/Client writes to the Session, resulting in data being sent to Server, after traversing the Filter ChainAll the responses/messages received from Server are traverses the Filter Chain and lands at IOHandler, for PRocessing

應(yīng)用實(shí)例開(kāi)發(fā)

下面根據(jù)上面給出的架構(gòu)設(shè)計(jì)描述,看一下Mina(版本2.0.7)自帶的例子,如何實(shí)現(xiàn)一個(gè)簡(jiǎn)單的C/S通信的程序,非常容易。服務(wù)端首先,服務(wù)器端需要使用的組件有IoAdaptor、IoHandler、IoFilter,其中IoFilter可選.我們基于Mina自帶的例子進(jìn)行了簡(jiǎn)單地修改,實(shí)現(xiàn)服務(wù)端IoHandler的代碼如下所示:

01package org.shirdrn.mina.server;
02 
03import org.apache.mina.core.service.IoHandlerAdapter;
04import org.apache.mina.core.session.IdleStatus;
05import org.apache.mina.core.session.IoSession;
06import org.slf4j.Logger;
07import org.slf4j.LoggerFactory;
08 
09public class TinyServerProtocolHandler extends IoHandlerAdapter {
10    private final static Logger LOGGER = LoggerFactory.getLogger(TinyServerProtocolHandler.class);
11    
12    @Override
13    public void sessionCreated(IoSession session) {
14        session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
15    }
16 
17    @Override
18    public void sessionClosed(IoSession session) throws Exception {
19        LOGGER.info("CLOSED");
20    }
21 
22    @Override
23    public void sessionOpened(IoSession session) throws Exception {
24        LOGGER.info("OPENED");
25    }
26 
27    @Override
28    public void sessionIdle(IoSession session, IdleStatus status) {
29        LOGGER.info("*** IDLE #" + session.getIdleCount(IdleStatus.BOTH_IDLE) + " ***");
30    }
31 
32    @Override
33    public void exceptionCaught(IoSession session, Throwable cause) {
34        session.close(true);
35    }
36 
37    @Override
38    public void messageReceived(IoSession session, Object message)
39            throws Exception {
40        LOGGER.info( "Received : " + message );
41       if(!session.isConnected()) {
42            session.close(true);
43       }
44    }
45}

這個(gè)版本中,IoHandlerAdapter實(shí)現(xiàn)了IoHandler接口,里面封裝了一組用于事件處理的空方法,其中包含服務(wù)端和客戶端的事件。在實(shí)際應(yīng)用中,客戶端可以選擇客戶端具有的事件,服務(wù)器端選擇服務(wù)器端具有的事件,然后分別對(duì)這兩類事件進(jìn)行處理(有重疊的事件,如連接事件、關(guān)閉事件、異常事件等)??蛻舳说腎oHandler的具體實(shí)現(xiàn)也是類似的,不過(guò)多累述。下面看啟動(dòng)服務(wù)器的主方法類,代碼如下所示:

01package org.shirdrn.mina.server;
02 
03import java.net.InetSocketAddress;
04 
05import org.apache.mina.filter.codec.ProtocolCodecFilter;
06import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
07import org.apache.mina.transport.socket.SocketAcceptor;
08import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
09import org.slf4j.Logger;
10import org.slf4j.LoggerFactory;
11 
12public class TinyMinaServer {
13 
14    private final static Logger LOG = LoggerFactory.getLogger(TinyMinaServer.class);
15    /** Choose your favorite port number. */
16    private static final int PORT = 8080;
17 
18    public static void main(String[] args) throws Exception {
19        SocketAcceptor acceptor = new NioSocketAcceptor();
20        acceptor.setReuseAddress(true);
21        acceptor.getFilterChain().addLast("codec"new ProtocolCodecFilter(newTextLineCodecFactory()));
22 
23        // Bind
24        acceptor.setHandler(new TinyServerProtocolHandler());
25        acceptor.bind(new InetSocketAddress(PORT));
26        LOG.info("Listening on port " + PORT);
27 
28        LOG.info("Server started!");
29 
30        for (;;) {
31            LOG.info("R: " + acceptor.getStatistics().getReadBytesThroughput() + ", W: " + acceptor.getStatistics().getWrittenBytesThroughput());
32            Thread.sleep(3000);
33        }
34    }
35 
36}

客戶端實(shí)現(xiàn)客戶端IoHandler的代碼如下所示:

01package org.shirdrn.mina.client;
02 
03import org.apache.mina.core.service.IoHandlerAdapter;
04import org.apache.mina.core.session.IdleStatus;
05import org.apache.mina.core.session.IoSession;
06import org.slf4j.Logger;
07import org.slf4j.LoggerFactory;
08 
09public class TinyClientProtocolHandler extends IoHandlerAdapter {
10 
11    private final static Logger LOGGER = LoggerFactory
12            .getLogger(TinyClientProtocolHandler.class);
13 
14    @Override
15    public void sessionCreated(IoSession session) {
16        LOGGER.info("CLIENT::CREATED");
17    }
18 
19    @Override
20    public void sessionClosed(IoSession session) throws Exception {
21        LOGGER.info("CLIENT::CLOSED");
22    }
23 
24    @Override
25    public void sessionOpened(IoSession session) throws Exception {
26        LOGGER.info("CLIENT::OPENED");
27    }
28 
29    @Override
30    public void sessionIdle(IoSession session, IdleStatus status) {
31        LOGGER.info("CLIENT::*** IDLE #"
32                + session.getIdleCount(IdleStatus.BOTH_IDLE) + " ***");
33    }
34 
35    @Override
36    public void exceptionCaught(IoSession session, Throwable cause) {
37        LOGGER.info("CLIENT::EXCEPTIONCAUGHT");
38        cause.printStackTrace();
39    }
40 
41    public void messageSent(IoSession session, Object message) throws Exception {
42        LOGGER.info("CLIENT::MESSAGESENT: " + message);
43    }
44}

下面看啟動(dòng)客戶端的主方法類,代碼如下所示:

01package org.shirdrn.mina.client;
02 
03import java.net.InetSocketAddress;
04 
05import org.apache.mina.core.future.ConnectFuture;
06import org.apache.mina.filter.codec.ProtocolCodecFilter;
07import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
08import org.apache.mina.transport.socket.SocketConnector;
09import org.apache.mina.transport.socket.nio.NioSocketConnector;
10import org.slf4j.Logger;
11import org.slf4j.LoggerFactory;
12 
13public class TinyMinaClient {
14 
15    private final static Logger LOG = LoggerFactory.getLogger(TinyMinaClient.class);
16    /** Choose your favorite port number. */
17    private static final int PORT = 8080;
18 
19    public static void main(String[] args) throws Exception {
20        SocketConnector connector = new NioSocketConnector();
21 
22        // Connect
23        connector.getFilterChain().addLast("codec"new ProtocolCodecFilter(newTextLineCodecFactory()));
24        connector.setHandler(new TinyClientProtocolHandler());
25 
26        for (int i = 0; i < 10; i++) {
27            ConnectFuture future = connector.connect(new InetSocketAddress(PORT));
28            LOG.info("Connect to port " + PORT);
29            future.awaitUninterruptibly();
30            future.getSession().write(String.valueOf(i));
31            Thread.sleep(1500);
32        }
33 
34    }
35}

我們只是發(fā)送了十個(gè)數(shù)字,每發(fā)一次間隔1500ms。測(cè)試上述服務(wù)器端與客戶端交互,首先啟動(dòng)服務(wù)器端,監(jiān)聽(tīng)8080端口。接著啟動(dòng)客戶端,連接到服務(wù)器端8080端口,然后發(fā)送消息,服務(wù)器端接收到消息后,直接將到客戶端的連接關(guān)閉掉。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
久久99精品久久久久久欧洲站| 欧美一区二粉嫩精品国产一线天| 成人香蕉视频| 国产精品高清在线| 国产精品高清免费在线观看| 无码人妻精品一区二区三区99v| 国内成人精品| 亚洲一区在线直播| 91超碰国产精品| 中文字幕2区| 国产亚洲精品精华液| 久草视频在线资源| 欧美xxxx三人交性视频| 国产伦精品一区二区| 亚洲成年人影院| 日韩成人中文电影| 国产九色porn网址| 有码一区二区三区| 国产精品18p| 古典武侠综合av第一页| 91在线高清| www.xxxx国产| 国产一区二区三区综合| 成人午夜精品在线| 特级西西444www大精品视频免费看| 91精品久久久久久久久中文字幕| 国产大片aaa| 日本系列第一页| 亚洲最大福利视频网| 国产情侣一区二区三区| 久久久久久久精| 性囗交免费视频观看| 国产精品亚洲第一区| 新版的欧美在线视频| 91www在线观看| 日韩精品国产一区| 国产无套丰满白嫩对白| 日韩在线播放视频| 国产精品视频一区二区三区综合| 欧美xoxoxo| 真实国产乱子伦精品一区二区三区| 中文字幕在线字幕中文| 国产目拍亚洲精品99久久精品| 国产一区二区三区精品久久久| 今天的高清视频免费播放成人| 欧美在线视频一区二区| 亚洲欧美日韩小说| 国产精品99精品无码视| 一本大道久久a久久综合| 韩国成人福利片在线播放| 免费在线观看一级毛片| 中国成人一区| 日韩精品专区| 亚洲精品久久久| 亚洲成色777777在线观看影院| 天海翼精品一区二区三区| 欧美三日本三级少妇三99| 久久亚洲国产中v天仙www| 亚洲国产高清在线观看视频| 久久国产乱子伦精品| 国产一区不卡在线| free性欧美69巨大| 在线观看国产精品网站| www视频在线观看com| 自拍偷拍欧美一区| 欧美成人午夜激情在线| 久久伊人精品| 国产成人无码一区二区在线播放| 欧美高清视频一二三区| 国内精品国产成人国产三级粉色| av av片在线看| 日韩在线视频观看| ady日本映画久久精品一区二区| 欧美国产精品v| 国产三级电影在线播放| 亚洲综合视频在线观看| 欧美劲爆第一页| 国产美女自拍视频| 亲爱的老师9免费观看全集电视剧| 日韩中文字幕高清在线观看| 日韩精品一卡二卡三卡四卡无卡| 如如影视在线观看经典| 蜜桃久久一区二区三区| 三级网站免费看| 四虎免费在线观看| 91欧美日韩在线| 91九色美女在线视频| 2022国产精品| 在线观看成人黄色| 中文天堂在线观看| 免费看污黄网站在线观看| 日韩亚洲欧美一区二区三区| 午夜欧美精品久久久久久久| 精品国产18久久久久久| 亚洲国产一区二区三区a毛片| 亚洲精品日产精品乱码不卡| 久久天天躁狠狠躁夜夜躁| 伊人精品在线观看| 久久高清精品| 最新亚洲视频| 中文字幕被公侵犯的漂亮人妻| 狠狠狠狠狠狠操| 奇米影视7777精品一区二区| 久久激情五月丁香伊人| 精品无码人妻少妇久久久久久| 一区不卡视频| 欧美精品乱人伦久久久久久| 中文亚洲字幕| 天天影视色香欲综合网老头| av天在线播放| 黄色一级视频免费观看| 午夜久久影院| 红桃视频国产一区| 网曝91综合精品门事件在线| 一本色道精品久久一区二区三区| 天天影视综合色| 免费看国产曰批40分钟| 濑亚美莉一二区在线视频| 成人欧美一区二区三区视频网页| 久热这里只精品99re8久| 97在线观看免费高清| 成人av片在线观看| 国产精品bbw一区二区三区| 国产精品影院在线| 精品产国自在拍| 91专区视频| 亚洲一区二区三区在线看| 亚洲精品视频在线观看免费视频| 老师让我她我爽了好久视频| 一本久道久久综合婷婷鲸鱼| 好看的日韩av电影| 亚洲成人黄色在线| 亚洲激情视频网站| 国产麻豆视频免费观看| 成人免费视频观看| **欧美日韩在线| 亚洲婷婷综合网| 视频一区二区三区在线观看| 国产精品久久久久永久免费观看| 亚洲精品一区二区三区在线播放| 又黄又爽的网站| 欧美性jizz18性欧美| 国产精品igao视频网网址不卡日韩| 欧美白人最猛性xxxxx69交| 成a人v在线播放| 亚洲网站一区| 波多野结衣作品集| 一区二区三区欧美视频| 亚洲国产裸拍裸体视频在线观看乱了| 极品国产91在线网站| 欧美激情网站| 99久久免费国产精品| 天天色综合久久| 国产精品 欧美在线| 亚洲区欧洲区| 国产午夜精品理论片a级大结局| 精品一区二区三区中文字幕老牛| 国精产品一区一区三区mba桃花| 欧美日韩激情一区二区三区| 精品国产网站地址| 在线一区亚洲| 五月婷婷亚洲综合| 日韩欧美中文字幕制服| 久久久久久久免费| 国产一区二区日韩| 尤物视频..com| 在线日本中文字幕| 欧美一级片免费在线| 国产亚洲欧美中文| 在线免费观看黄色片| 欧美三级在线观看视频| 欧美性理论片在线观看片免费| 亚洲国产精品91| 国内精品美女av在线播放| 免费久久网站| 四虎精品一区二区| 97超碰人人看| 无码人妻熟妇av又粗又大| 日韩av在线看免费观看| 亚洲高清免费在线观看| 亚洲一区二区三区国产| 97久久精品人人爽人人爽蜜臀| 狠狠色狠狠色综合婷婷tag| 久久久久久综合网| 很黄很污的网站| 亚洲最新中文字幕| 成年人网站大全| 久久免费视频网| 香蕉视频免费在线播放| 亚洲精品午夜久久久| 国产成人超碰人人澡人人澡| 樱花www成人免费视频| 麻豆av在线免费看| www在线视频观看| 色视频免费版高清在线观看| 欧美乱妇18p| 亚洲精品乱码久久久久久蜜桃动漫| 日本精品久久| 欧美日韩免费视频| av网站有哪些| 成人看av片| 超碰在线人人干| 在线观看中文字幕av| 久久久久久久亚洲精品| 亚洲欧洲一区二区福利| 久久蜜桃资源一区二区老牛| 高跟丝袜欧美一区| 久草在线免费资源| 中文字幕在线直播| 天天爽夜夜爽夜夜爽精品| 国产真实生活伦对白| 欧美裸体xxxx极品少妇| 97超视频在线观看| 成年人性生活视频| 亚洲qvod图片区电影| 亚洲一二三在线| 日韩欧美一区二区视频| 国产av人人夜夜澡人人爽麻豆| 国产色在线视频| 免费看亚洲片| 六月丁香综合| 92看片淫黄大片欧美看国产片| 99久久精品一区二区三区| 一本色道亚洲精品aⅴ| 欧美亚洲日本精品| xxxxwwww在线免费观看| 国产真实老熟女无套内射| 天天爽天天爽夜夜爽| 中文字幕一区二区三区乱码图片| 国产精品福利在线观看播放| 欧美成人性生活视频| 国产绳艺sm调教室论坛| 欧美日韩亚洲国产综合| av之家在线观看| 欧美日韩在线观看一区| 亚洲精品资源美女情侣酒店| 久久众筹精品私拍模特| 91免费看片网站| 日韩第一区第二区| 国产又大又粗又爽的毛片| 国产精品久久久影院| 欧美在线视频观看| 91精品视频在线看| 亚洲在线天堂| 国产美女撒尿一区二区| 国产激情视频在线| 性欧美18一19内谢| 亚洲www免费| 天天摸夜夜操| 亚洲精品成人a在线观看| 日韩精品成人在线| 四虎永久成年免费影院| 欧美性xxxxxxx| 麻豆国产欧美一区二区三区| 亚洲小说欧美激情另类| 国产欧美日韩视频一区二区| 99精品女人在线观看免费视频| 欧洲中文字幕精品| 久久久久久欧美| 欧美福利电影在线观看| 自拍视频第一页| 丰满人妻一区二区三区免费| 欧美日韩中文字幕一区二区三区| 五月花成人网| 欧美精品视频www在线观看| 国产精品久久久久久久久晋中| 美女999久久久精品视频| 欧美视频一区二区| 国内精品400部情侣激情| 午夜啪啪福利视频| 国产乱人伦精品一区二区在线观看| 尤物网站在线看| 亚洲永久精品大片| 激情五月***国产精品| 亚洲女厕所小便bbb| 欧美一区二区三区高清视频| 国产麻豆视频一区二区| 伊人夜夜躁av伊人久久| 中文字幕视频网| 亚洲аv电影天堂网| 久久影院电视剧免费观看| 欧美激情福利视频在线观看免费| 欧美男男video| 免费黄色网址网站| 亚洲第一精品夜夜躁人人躁| 天天影院图片亚洲| av成人在线观看| 久久亚洲精品一区| 伊人手机在线| 亚洲av成人片无码| 一本岛在免费一二三区| 欧美激情一区二区三区蜜桃视频| 四虎成人精品永久免费av九九| 黄色工厂这里只有精品| 激情综合亚洲精品| 亚洲在线观看网站| 国产一级二级三级在线观看| 同性恋视频一区| 日韩有吗在线观看| 大胆亚洲人体视频| 日韩一区亚洲二区| 深夜福利一区二区三区| 精品久久久久久一区二区里番| 极品尤物一区二区| 在线观看中文字幕不卡| 国产一区二区波多野结衣| 欧美色女视频| 在线免费观看亚洲| av图片在线观看| 欧美超级乱淫片喷水| 欧美黄色网视频| 欧美日韩大陆一区二区| 亚洲精品鲁一鲁一区二区三区| 国产亚洲一区二区三区| 日本中文字幕一区二区视频| 秋霞午夜在线观看| 亚洲欧美日韩综合网| 老师我好爽再深一点的视频| 亚洲国产日韩欧美在线观看| 亚洲另类第一页| 久久九九有精品国产23| 欧美日韩精品在线观看| 亚洲天堂网在线视频| 久久免费在线观看| 久久亚洲成人| 国产免费拔擦拔擦8x在线播放| 日本夜夜草视频网站| 国产欧美精品在线播放|