Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SelectionKey.InterestTops的底层工作(int ops)_Java_Sockets_Selector_Nio - Fatal编程技术网

Java SelectionKey.InterestTops的底层工作(int ops)

Java SelectionKey.InterestTops的底层工作(int ops),java,sockets,selector,nio,Java,Sockets,Selector,Nio,我知道服务器套接字通道被注册为侦听接受,当被接受时,一个通道被注册为读取,一旦读取,它就被注册为写入,这是通过使用InterestTops方法将相关密钥添加到SelectionKey的兴趣集来完成的 但是,当我们从键中删除一些interestop时,例如key.interestOps(key.interestOps()&~SelectionKey.OP_READ) 这里到底发生了什么?这是否意味着服务器将不侦听任何对属于此套接字的通道的传入请求,而源通道将不知道服务器的这一决定,并可能继续向服务

我知道服务器套接字通道被注册为侦听接受,当被接受时,一个通道被注册为读取,一旦读取,它就被注册为写入,这是通过使用InterestTops方法将相关密钥添加到SelectionKey的兴趣集来完成的

但是,当我们从键中删除一些interestop时,例如
key.interestOps(key.interestOps()&~SelectionKey.OP_READ)

这里到底发生了什么?这是否意味着服务器将不侦听任何对属于此套接字的通道的传入请求,而源通道将不知道服务器的这一决定,并可能继续向服务器发送数据?或者它会以某种方式通知渠道来源这一决定

在分组交换术语中,上述操作是否有效地与服务器接收分组并在该分组所属的信道的兴趣密钥被“取消设置”时丢弃分组相同

但是,当我们从键中删除一些interestop时,例如
key.interestOps(key.interestOps()&~SelectionKey.OP_READ)

这里到底发生了什么

实际发生的情况如下:

public void interestOps(int interestOps)
{
    this.interestOps = interestOps;
}
这是否意味着服务器将不会侦听到属于此套接字的通道的任何传入请求

这意味着如果数据通过套接字到达,
选择器
不会触发任何
操作读取
事件。这并不意味着不会收到数据

而源通道将忽略服务器的这一决定,并可能继续向服务器发送数据

如果“源通道”指的是对等方,则无论如何都不建议这样做,除非接收端的接收缓冲区已满

或者它会以某种方式通知渠道来源这一决定

没有

在分组交换术语中,上述操作是否有效地与服务器接收分组并在该分组所属的信道的兴趣密钥被“取消设置”时丢弃分组相同


否。

“一旦读取,它将注册为写入”否。当且仅当
write()
返回零时,它将注册为写入,下次不返回时,它将取消注册。任何其他用法都是不正确的。因此,一旦我们从密钥中删除了InterestTops,然后在一段时间后再次添加它,那么此后通过套接字到达的所有数据会发生什么情况?选择器是否会使用排序队列以某种方式重放它,或者该数据只是“丢失”了?它会留在套接字接收缓冲区中,并导致OP_读取事件,直到被读取耗尽为止。OP_READ只是表示“套接字接收缓冲区中有数据”。除非重新设置连接,否则TCP从不丢弃数据。套接字接收缓冲区是队列。