Web Socket和非阻塞模式

时间:2011-01-20 03:03:41

标签: java

如果我们将套接字通道configureBlocking设置为false,那么连接会自动变为双工模式吗?我想说的是,在这种情况下,服务器可以异步地将数据推送到客户端浏览器吗?我是否需要手动编程此行为?

1 个答案:

答案 0 :(得分:2)

ServerSocketChannel和SocketChannel configureBlocking方法继承自AbstractSelectableChannel类。 configureBlocking方法返回SelectableChannel对象。

以下是有关SelectableChannel对象的文档的摘录:

  

阻止模式

     

可选择的通道处于阻塞模式或非阻塞模式。在阻塞模式下,在通道上调用的每个I / O操作都将阻塞,直到完成为止。在非阻塞模式下,I / O操作永远不会阻塞,并且可以传输比请求的字节更少的字节,或者根本不传输任何字节。可选择通道的阻塞模式可以通过调用其isBlocking方法来确定。

     

新创建的可选频道始终处于阻止模式。非阻塞模式与基于选择器的多路复用结合使用最为有用。在使用选择器注册之前,必须将通道置于非阻塞模式,并且在取消注册之前,通道可能不会返回阻塞模式。

新创建的可选频道始终处于阻止模式,因此如果您需要非阻塞双工模式,则必须显式调用configureBlocking(false)。

以下是您可能会发现有用的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