java nio之select()问题

huafenghua 2005-11-07 02:07:35
近阶段在学习java nio的问题,对其中的Selector类,对select()方法等一直问题多多,现有以下疑问,期待各位高手的不吝赐教。
1、一个Selector()最多可以注册多少个Channels呢,听同事说,unix c里面的这个是可以配置的,默认为64个。请问,java是否也有这样的一个数量大小的配置?
2、当一个socketchannel是可以read的时候,立即把里面的数据读出来,可是我要不关闭连接和流的话,socketchannel.read(ByteBuffer)就一直返回0,还是占用了一个线程,请问,我是否可以在读完流里面的数据后,取消掉read的注册?然后再重新注册这个socketchannel?
3、请问哪位有用java nio做服务端的实例?可以支持大并发量的那种?非常感谢!
...全文
182 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
9205026 2005-11-07
  • 打赏
  • 举报
回复
1) Java自动管理,与unix下不太一样。我建议你作个试验,看看能支持多少个channel。我采用windows平台,底层的api不一样,windows异步通讯没有这个限制(采用CompeletionPort)。如果只有64个限制,请设计一个数据请求线程池,很容易吧?
2)很奇怪,当channel可以读时,你需要直接读取(利用线程池读写数据),读完缓冲区,需要设计报文识别器,看看是否完整报文等等操作。然后继续等待读取。不需要取消的,但需要继续注册。
// Resume interest in OP_READ
key.interestOps(key.interestOps() | SelectionKey.OP_READ);
// Cycle the selector so this key is active again
key.selector().wakeup();
3)我做过一个异步通讯服务器,支持协议可配置可自动识别等。对于通讯部分,已经完成,在考虑能够支持JMS等方面功能。这个不是例子,不能公开。
我的msn: hbao2k@hotmail.com,菜鸟就不要来烦我了哦
believefym 2005-11-07
  • 打赏
  • 举报
回复
2。不可能返回0的,就等待输入

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧