【问题标题】:Nio Selector.select IO readinessNio Selector.select IO 就绪
【发布时间】:2015-04-13 06:26:49
【问题描述】:

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

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

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

但它没有具体说明就绪的含义。

所以我的问题:

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

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

【问题讨论】:

    标签: java sockets tcp udp nio


    【解决方案1】:

    但它没有说明准备好是什么意思。

    所以我的问题:

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

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

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

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

    当只有 [packet] 的一部分可用时,Selector 会被唤醒?

    在 TCP 的情况下,您可以假设 要么 至少一个字节 流的结尾是可用的。 TCP 级别没有“包”、“包”或“消息”之类的东西。

    【讨论】:

    • 感谢您的明确答复。是的,我的意思是数据报,谢谢指出:)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2021-07-10
    • 2011-02-03
    • 1970-01-01
    • 2022-12-03
    • 1970-01-01
    • 2016-05-31
    相关资源
    最近更新 更多