networking - 很多端口数据很少,还是一个端口数据很多?

标签 networking network-programming

我一直在使用名为 ROS (http://www.ros.org) 的系统进行一些工作。

ROS 中的网络节点之间发送了许多不同类型的数据。
您定义了要在消息中发送的数据结构,ROS 将处理打开两个节点之间的特定端口,该端口仅发送该数据结构。

所以如果有 5 个不同的消息,就会有 5 个不同的端口。

与这种情况相反,我看到其他平台只是将所有不同的消息推送到一个端口。这意味着需要进行一种多路复用/多路分解(通过在接收端进行某种消息解析来完成)。

我想知道的是......从性能角度来看哪个更好?

操作系统是否会根据端口快速切换,以便像 ROS 这样的系统不需要做太多工作来计算消息中的内容并进行解释?

或者

开放大量端口是否意味着大量更慢的内核调用,而必须计算和转换消息类型的成本最终会超过在端口之间切换所花费的时间?

当它以高速率扩展到大量数据和许多不同的消息类型时,将会有很多端口。所以我想,在扩展这些拓扑中的每一个时,性能将是选择工作方式的一个重要因素。

我还应该指出,这些节点通常存在于一个小型网络上,或者大部分时间存在于一台机器上,其中网络被用作进程间通信的力量。所以传输时间在整个系统时序中只是一个很小的因素。

ROS 作为一种机器人架构,可能每个传感器和执行器都有一个节点,因此根据您系统的复杂性,我们可能会谈论 20-30 个节点,在 10-100Hz 之间推送小型(100 字节左右)数据

最佳答案

这取决于。我不知道 ROS 的细节,但在网络中它归结为以下限制:

  • 距离:光速很快,但随着距离的增加,它开始产生影响
  • 协议(protocol)开销:面向连接与无连接

  • 在操作系统方面,维护一个空闲端口列表并没有太大的开销——当然这是有成本的 但是 一切都是相对的:如果您谈论的是具有长距离链接的分布式系统,那么很容易争辩说,与管理通信质量相比,循环通过操作系统网络端口的关注度较低。

    没有更具体的问题,我将在这里停止。

    关于networking - 很多端口数据很少,还是一个端口数据很多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1666731/

    相关文章:

    tomcat - Spring Boot,端口443可能已在使用中,或者连接器配置错误

    networking - Windows Phone 8 模拟器 - 从主机 PC 上的主机文件访问域?

    java - 为什么我得到 “Address already in use (Bind failed)” ?

    c - 如何将原始套接字绑定(bind)到特定接口(interface)

    linux - 使用 tc 的流量整形不准确,具有高带宽和延迟

    c - 将 "WINAPI"数据类型从 Windows 移植到 Linux

    wcf - 什么时候适合在 webclient 或 httpwebrequest 上使用 WCF?

    performance - 模拟不同国家的访问

    java - 使用 Java 检测另一台设备上的端口是否打开

    networking - 在 docker 容器内运行 HBase