【问题标题】:Streaming different kinds of data over local network: tcp or udp?通过本地网络流式传输不同类型的数据:tcp 还是 udp?
【发布时间】:2017-05-31 19:31:26
【问题描述】:

我在网络编程方面没有太多经验,但出现了一个有趣的问题,需要它。服务器将向其他机器传输多个不同类型的数据流。每台机器都应该能够选择它想要接收的流(一个或多个)。整个设置仅限于本地网络。最初,只有两个客户端,但如果可能的话,我想设计一种可扩展的方法。

现有的服务器代码,它只流式传输单个流,正在使用 TCP 流式套接字来执行此操作。但是,从有关该主题的一些阅读中,我不确定这种方法是否可以很好地扩展到多个流和多个客户端。原因是:两个想要接收相同流但通过不同 TCP 套接字连接的客户端不会导致带宽浪费吗?尤其是与允许多播的 UDP 相比。

由于我缺乏经验,我依靠更知情的人来给我建议:考虑到我确实希望流是可靠的,是否值得从头开始使用 UDP,并在其中实现可靠性,而不是继续使用TCP?或者,通过设计合适的网络结构会更好地解决这个问题吗?如果需要,我很乐意提供更多详细信息。谢谢。

更新:我目前正在查看PGMemcaster 以获得可靠的多播。服务器端必须有 C# 实现,客户端必须有 python 实现。

【问题讨论】:

  • 首先。如果客户端没有从流中获取所有数据或顺序错误,这有关系吗?
  • 可靠性很重要,因为流中的每条消息都应该是连续的。客户将依靠正确的顺序对其进行有用的处理。
  • 好吧,我不会费心使用 UDP。为什么要尝试重新实现某人已经做出的东西来确保这两个非常重要的问题
  • 你是对的。但是有没有一种可以多播但又可靠的协议呢?
  • 可靠性需要双向通信,但多播(一对多)是单向的。一台主机上的任何缺失信息都需要重新发送给所有主机。

标签: networking tcp udp


【解决方案1】:

既然您想要一个可扩展的程序,那么 UDP 将是一个更好的选择,因为它不会花费额外的时间来验证数据是否已被接收,从而使发送数据的过程更快。

【讨论】:

  • 根据评论,“可靠性很重要,因为流中的每条消息都应该是连续的。客户端将依赖正确的顺序对其进行有用的处理," UDP 将是不可接受的。
  • 但是,由于 UDP 比 TCP 更快,这允许更多的流,因此能够为更多的客户端提供服务,从而使其成为一种更具可扩展性的方法。
  • 我明白,但 OP 想要可靠性和数据包排序,而 UDP 不提供。它可以由应用程序添加到 UDP,但您尚未解决与请求有关的 UDP 问题。
  • 已经很晚了,但对于其他会看到这个问题的人来说,SCTP 可用,看起来像 OP 需要的,或者可以更容易地适应 OP 的需要
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-27
  • 1970-01-01
  • 2013-04-13
  • 2016-06-20
  • 1970-01-01
  • 2013-08-14
  • 1970-01-01
相关资源
最近更新 更多