我们希望将tcp流控制作为新的java nio库的主要组件。它会像这样...
库将数据触发到Listener.incomingData(DataChunk dataChunk);
在调用dataChunk.processed()之前,即使有任何数据,库也不会触发任何数据。
通常,您可以在前几个dataChunk上调用processing()方法,但在某些消息的最后一个上,您写入某个远程套接字并为其提供回调处理程序。
调用write回调后,您将调用最后一个dataChunk.processed()以再次释放tcp流控制
大提示:如果您没有从nic缓冲区中读取数据,则第2步是tcp流控制自动启动的地方。这是全部自动的(我们用java nio进行了测试)。不过,问题是我们如何将密钥置于轮询器停止释放并等待除此端口之外的所有其他套接字上的数据的状态。我不介意它在有新数据时是否释放,因为我们会看到最后一个dataChunk尚未处理并忽略它,但是我们不希望轮询程序线程循环100%cpu。有没有一种方法可以做到这一点,所以我们可以使用这种潜在的开源nio框架为任何服务器实现自动节流。
最佳答案
只需取消它,然后稍后重新注册该频道,或者通过更改其OP_READ,
为其取消注册interestOps()
,并在准备再次从中读取时将其更改回。