Nio Selector.select IO 就绪
Nio Selector.select IO readiness
在 java NIO 中,Selector.select() 是否保证至少有一个完整的 UDP 数据报内容在套接字通道上可用,或者理论上 Selector 可以在少于一个数据报时唤醒, 说几个字节 ?
如果传输协议是 TCP 会发生什么,关于 Selector.select(),与 UDP 有区别吗?
来自API:
选择一组键,其对应通道 已准备好进行 I/O 操作。
但是它没有具体说明准备就绪的含义。
所以我的问题:
传入 datagrams/streams 如何从硬件转到 Java 应用程序套接字(通道)。
当使用 UDP 或 TCP 客户端时,是否应该假设至少收到一个数据报,或者当只有一部分数据报可用时选择器可以唤醒?
It doesn't however specify what ready means.
So my questions:
- how incoming packages/streams go from hardware to Java application Socket (Channels).
它们到达缓冲的 NIC,然后传递到网络协议栈,然后从那里传递到套接字接收缓冲区。当您调用 read().
时,会从那里检索它们
- when using UDP or TCP client, should one assume that at least one package is received
你的意思是数据包。实际上在UDP的情况下你的意思是数据报。你可以假设整个数据报已经收到UDP的情况。
or Selector could wake when there is only a part of [packet] available?
在 TCP 的情况下,您可以假设 或者 至少一个字节 或 流的结尾是可用的。在 TCP 级别没有 'package' 或 'packet' 或 'message' 这样的东西。
在 java NIO 中,Selector.select() 是否保证至少有一个完整的 UDP 数据报内容在套接字通道上可用,或者理论上 Selector 可以在少于一个数据报时唤醒, 说几个字节 ?
如果传输协议是 TCP 会发生什么,关于 Selector.select(),与 UDP 有区别吗?
来自API: 选择一组键,其对应通道 已准备好进行 I/O 操作。
但是它没有具体说明准备就绪的含义。
所以我的问题:
传入 datagrams/streams 如何从硬件转到 Java 应用程序套接字(通道)。
当使用 UDP 或 TCP 客户端时,是否应该假设至少收到一个数据报,或者当只有一部分数据报可用时选择器可以唤醒?
It doesn't however specify what ready means.
So my questions:
- how incoming packages/streams go from hardware to Java application Socket (Channels).
它们到达缓冲的 NIC,然后传递到网络协议栈,然后从那里传递到套接字接收缓冲区。当您调用 read().
- when using UDP or TCP client, should one assume that at least one package is received
你的意思是数据包。实际上在UDP的情况下你的意思是数据报。你可以假设整个数据报已经收到UDP的情况。
or Selector could wake when there is only a part of [packet] available?
在 TCP 的情况下,您可以假设 或者 至少一个字节 或 流的结尾是可用的。在 TCP 级别没有 'package' 或 'packet' 或 'message' 这样的东西。