Nio Selector.选择IO就绪



在java NIO中,Selector.Selector()是否保证在套接字通道上至少有一个完整的UDP数据报内容可用,或者理论上Selector可以在数据报少于一个时唤醒,比如几个字节?

如果传输协议是TCP,会发生什么?对于Selector.select(),UDP有区别吗?

来自API:选择一组键,其对应通道已准备好进行I/O操作

然而,它并没有具体说明就绪意味着什么。

所以我的问题是:

  • 传入数据报/流如何从硬件到Java应用程序套接字(通道)。

  • 当使用UDP或TCP客户端时,是否应该假设至少接收到一个数据报,或者Selector可以在只有一部分数据报可用时唤醒?

但是它没有指定ready的含义。

所以我的问题是:

  • 传入包/流如何从硬件到Java应用程序套接字(通道)

它们到达NIC,在那里进行缓冲,然后传递到网络协议堆栈,然后从那里传递到套接字接收缓冲区。当您调用read().时,会从中检索到它们

  • 在使用UDP或TCP客户端时,是否应假设至少收到一个包

您的意思是数据包实际上,在UDP的情况下,你指的是数据报在UDP的情况下,您可以假设已经接收到整个数据报。

或Selector可能在只有部分[数据包]可用时唤醒?

在TCP的情况下,您可以假设至少有一个字节流结尾可用。在TCP级别上不存在"包"、"数据包"或"消息"之类的东西。

最新更新