2011-01-20 139 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