selectionkey.interestops的底层工作(int ops)

0vvn1miw  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(812)

我知道服务器套接字通道被注册为侦听接受,当被接受时,通道被注册为读取,一旦读取,它就被注册为写入,这是通过使用interestops方法将相关密钥添加到selectionkey的兴趣集来完成的。
但是,当我们从一个键中删除一些有趣的内容时,例如 key.interestOps(key.interestOps() & ~SelectionKey.OP_READ); 这里到底发生了什么?这是否意味着服务器将不侦听任何传入到属于此套接字的通道的请求,而源通道将忽略服务器的此决定,并可能继续向服务器发送数据?或者它会以某种方式通知渠道来源这个决定。
在分组交换术语中,如果该分组所属的信道的感兴趣密钥被“取消设置”,则上述操作是否有效地与服务器接收分组并丢弃该分组相同

jhiyze9q

jhiyze9q1#

但是,当我们从一个键中删除一些有趣的内容时,例如 key.interestOps(key.interestOps() & ~SelectionKey.OP_READ); 这里到底发生了什么?
实际上发生的事情是这样的:

public void interestOps(int interestOps)
{
    this.interestOps = interestOps;
}

这是否意味着服务器将不监听任何传入的请求到属于这个套接字的通道
这意味着 Selector 不会触发任何 OP_READ 事件,如果数据通过套接字到达。这并不意味着数据不会被接收到。
而源通道将忽略服务器的这一决定,并可能继续向服务器发送数据?
如果您所说的“源-通道”是指对等方,则无论如何都不建议这样做,除非接收缓冲区在接收器处填满。
或者它会以某种方式通知渠道来源这个决定。
不。
在分组交换术语中,如果该分组所属的信道的感兴趣密钥被“取消设置”,则上述操作是否有效地与服务器接收分组并丢弃该分组相同。
不。

相关问题