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