結合具體的Java Socket編程,討論使用NIO提高服務端程序的性能的問題。
Java NIO增加了新的SocketChannel、ServerSocketChannel等類來提供對構建高性能的服務端程序的支持。 SocketChannel、ServerSocketChannel能夠在非阻塞的模式下工作,它們都是selectable的類。在構建服務器或者中間件時,推薦使用Java NIO。
在傳統的網絡編程中,我們通常使用一個專用線程(Thread)來處理一個Socket連接,通過使用NIO,一個或者很少幾個Socket線程就可以處理成千上萬個活動的Socket連接。
通常情況下,通過ServerSocketChannel.open()獲得一個ServerSocketChannel的實例,通過SocketChannel.open或者serverSocketChannel.aclearcase/" target="_blank" >ccept()獲得一個SocketChannel實例。要使ServerSocketChannel或者SocketChannel在非阻塞的模式下操作,可以調用
serverSocketChannel.configureBlocking (false);
或者
socketChannel.configureBlocking (false);
語句來達到目的。通常情況下,服務端可以使用非阻塞的ServerSocketChannel,這樣,服務端的程序就可以更容易地同時處理多個socket線程。
下面我們來看一個綜合例子,這個例子使用了ServerSocketChannel、SocketChannel開發了一個非阻塞的、能處理多線程的Echo服務端程序,見示例12-14。
【程序源代碼】
使用:運行此程序,然后在控制臺輸入命令telnet localhost 23。
(責任編輯:龔勛)
原文轉自:http://www.anti-gravitydesign.com