您的位置:首页 > 编程语言 > Java开发

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

2015-07-07 17:14 656 查看
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就可以分别处理,分别做不同的事情。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: