近阶段在学习java nio的问题,对其中的Selector类,对select()方法等一直问题多多,现有以下疑问,期待各位高手的不吝赐教。
1、一个Selector()最多可以注册多少个Channels呢,听同事说,unix c里面的这个是可以配置的,默认为64个。请问,java是否也有这样的一个数量大小的配置?
2、当一个socketchannel是可以read的时候,立即把里面的数据读出来,可是我要不关闭连接和流的话,socketchannel.read(ByteBuffer)就一直返回0,还是占用了一个线程,请问,我是否可以在读完流里面的数据后,取消掉read的注册?然后再重新注册这个socketchannel?
3、请问哪位有用java nio做服务端的实例?可以支持大并发量的那种?非常感谢!
1、一个Selector()最多可以注册多少个Channels呢,听同事说,unix c里面的这个是可以配置的,默认为64个。请问,java是否也有这样的一个数量大小的配置?
2、当一个socketchannel是可以read的时候,立即把里面的数据读出来,可是我要不关闭连接和流的话,socketchannel.read(ByteBuffer)就一直返回0,还是占用了一个线程,请问,我是否可以在读完流里面的数据后,取消掉read的注册?然后再重新注册这个socketchannel?
3、请问哪位有用java nio做服务端的实例?可以支持大并发量的那种?非常感谢!
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: [email protected],菜鸟就不要来烦我了哦