TCP 使用NIO

关于java 的TCP消息处理,系统给我们提供的有Socket InputStream,OutputStream 简单的小系统使用可以满足要求。假如你的系统与如下需求呢,客户端需要同时跟五个服务器建立连接,并且处理五个服务器的数据,你会怎么处理,一个线程处理一个服务器的数据吗?那么至少需要五个线程,对于系统来说消耗的资源太多,并且多个线程如果访问同一种数据会出现数据同步的问题,那么有没有考虑过使用一个线程来处理五个服务器的数据,那么有一个首要的问题就是就是不能读取数据的时候不能线程阻塞。NIO的强大功能来自channel的非阻塞特性。我们知道InputStream的read()方法,会一直阻塞,知道有数据的来临,如果使用inputStream来读取服务器的数据,显然是不合理的。

NIO的channel的一个重要特征就是通过配置它的阻塞行为,实现非阻塞通道 channel.configureBlocking(false).在非阻塞信道上,调用一个方法总是会立即返回,例如在一个非阻塞的信道上ServerSocketChannel.accept()方法,如果有客户端在等待,则返回socketchannel,如果么有则返回null.

可能阻塞的I/0操作包括建立连接,读数据,写数据,通过非阻塞信道,这些操作都立即返回,我们必须反复调用这些操作,直到I/O完成。

posted @ 2016-05-17 13:00  小兔喝咖啡  阅读(591)  评论(0编辑  收藏  举报