2011-01-20 141 views
0

如果我們將套接字通道的configureBlocking設置爲false,那麼連接會自動變爲雙工模式?我想說的是,在這種情況下,服務器可以異步地將數據推送到客戶端瀏覽器嗎?我是否需要手動編程此行爲?Web Socket和非阻塞模式

回答

2

ServerSocketChannel和SocketChannel configureBlocking方法從AbstractSelectableChannel類繼承。 configureBlocking方法返回一個SelectableChannel對象。

這裏是從約一個的SelectableChannel對象的文檔片段:

阻塞模式

的可選擇信道或者是在阻斷模式或非阻塞模式。在阻塞模式下,通道上調用的每個I/O操作都會阻塞,直到完成。在非阻塞模式下,I/O操作永遠不會阻塞,並且可能傳輸比請求的字節更少的字節,或者可能沒有字節。可選通道的阻塞模式可以通過調用其isBlocking方法來確定。

新創建的可選頻道始終處於阻止模式。非阻塞模式與基於選擇器的多路複用相結合最爲有用。頻道必須在註冊到選擇器之前進入非阻止模式,並且在註銷之前可能不會返回到阻止模式。

新創建的可選擇通道總是處於阻塞模式,所以你必須明確地調用configureBlocking(假),如果你想非阻塞雙工模式。

下面是Javadoc中的列表,你會發現有用: http://download.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html
http://download.oracle.com/javase/6/docs/api/java/nio/channels/ServerSocketChannel.html

http://download.oracle.com/javase/7/docs/api/java/nio/channels/SelectableChannel.html

http://download.oracle.com/javase/7/docs/api/java/nio/channels/spi/AbstractSelectableChannel.html#configureBlocking(boolean

+0

總之,一個不得不修改程序使用可選的。它不像翻轉開關那麼簡單。 – 2011-01-20 03:48:33