关闭

java nio 如何建立和管理多个channel

706人阅读 评论(0) 收藏 举报

1、建立多个监听socket,每个监听独立处理,互不干扰

ServerSocketChannel sc1 = ServerSocketChannel.open();

sc1.configureBlocking(false);

sc1.socket().bind(new InetSocketAddress());

SelectionKey skey1 = sc1.register(selector, OP_ACCEPT);

skey1.attach(new ServerHandler(selector, sc1));

ServerSocketChannel sc2 = ServerSocketChannel.open();

sc2.configureBlocking(false);

sc2.socket().bind(new InetSocketAddress());

SelectionKey skey2 = sc2.register(selector, OP_ACCEPT);

skey2.attach(new SHandler(selector, sc2));

上述代码中attach函数最关键了,它实现了一个key和一个对象的绑定,这样当我们每次使用selector函数发现有连接进入时,我们可以使用下面语句:

Handler handler = (Handler) key.attachment();获取与当前key相关的对象,从而处理与当前key绑定的监听socket,这样我们就可以对不同的监听socket做不同的操作。


2、处理多个连接,每个连接执行不同的操作,互不干扰

与上面处理监听相同,SocketChannel在register的时候,使用attach方法,将key和一个对象绑定,当此key有可读或可写的事件时,使用key.attachment()方法即可用获取到与此key对应的处理对象。 


3、while循环如何处理key

while(true) {

for(;keys;) {

Handler h = (Handler)key.attachment();

        h.doFunc();

}

}

上面attachment函数即可获取与当前key绑定的处理对象,这样每个key即每个channel就可以分别处理,分别做不同的事情。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1519959次
    • 积分:22805
    • 等级:
    • 排名:第316名
    • 原创:472篇
    • 转载:1953篇
    • 译文:3篇
    • 评论:73条
    文章分类
    最新评论
    博客推荐
    http://www.vpser.net/