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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值