我们希望将 tcp 流控制作为新 java nio 库的主要组件。它会像这样工作......
- 库将数据触发到 Listener.incomingData(DataChunk dataChunk);
- 在调用 dataChunk.processed() 之前,即使有任何数据,库也不会再触发任何数据。
- 通常,您可以在前几个 dataChunk 上调用 processes() 方法,但在某些消息的最后一个上,您写入某个远程套接字并给它一个回调处理程序。
- 一旦调用了 write 回调,您就调用最后一个 dataChunk.processed() 以再次解除 tcp 流控制
大注意:如果您没有从 nic 缓冲区读取,第 2 步是 tcp 流控制自动启动的地方。这都是自动的(我们使用 java nio 对其进行了测试)。但问题是我们如何将密钥置于轮询器停止释放并等待除此之外的所有其他套接字上的数据的状态。我不介意它是否在有新数据时发布,因为我们会看到最后一个 dataChunk 尚未处理并忽略它,但我们不希望轮询线程循环 100% cpu。有没有办法实现这一点,这样我们就可以使用这个潜在的开源 nio 框架为任何服务器实现自动节流。