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就可以分别处理,分别做不同的事情。
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就可以分别处理,分别做不同的事情。
相关文章推荐
- java编程思想---对象
- java_JDBC(4)
- [LeetCode][Java] Palindrome Number
- SpringMvc + Quarzt 动态执行任务实现过程
- JAVA线程的初步学习
- Java语言程序设计进阶----第一周作业
- Spring + Quartz 实现定时任务
- java-异常篇上
- MyBatis+Spring+Maven的简单整合Demo
- Java NIO:浅析I/O模型
- 基于quartz1.66+spring2.5的一个模块化设计
- java线程以及synchronized关键字的使用
- Java 读写Properties配置文件
- JAVA多态学习2
- 强大的Spring的EL表达式
- Java语言的基础组成
- 停止Java线程,小心interrupt()方法
- Isomorphic Strings
- 拦截器和过滤器的区别
- 检查浏览器是否已经启用Java支持功能