需要帮助决定何时在我的基本聊天网络中使用 UDP over TCP
Posted
技术标签:
【中文标题】需要帮助决定何时在我的基本聊天网络中使用 UDP over TCP【英文标题】:Need help deciding when to use UDP over TCP with my basic chat network 【发布时间】:2013-08-03 06:05:10 【问题描述】:我已经阅读了很多关于 UDP 与 TCP 的其他主题,但还没有真正找到任何可以正确回答我的设计问题的主题
我将为一个项目开发的聊天网络将有 3 个主要应用程序:客户端、服务器和 HUB(服务器)。
HUB服务器是将所有服务器连接在一起形成网络的主服务器。 服务器将跟上正在制作的聊天室,换句话说,它将托管房间。 客户端将用于连接服务器以加入聊天室。
现在我主要关心的是,在从客户端到客户端、服务器到服务器或服务器到客户端发送或执行请求时,何时应该使用 UDP over TCP 或反之亦然?
注意:整个聊天网络项目100% 基于文本,没有图形、网络摄像头、麦克风或文件共享功能。
【问题讨论】:
【参考方案1】:UDP
在可以接受丢失一些数据包时使用,例如在流式传输中。在聊天系统的情况下,丢失消息是不可接受的,所以我会选择TCP
。有关详细信息,请参阅 Difference between TCP and UDP? 和 When is it appropriate to use UDP instead of TCP?。
【讨论】:
我正在考虑设计 HUB 服务器,这样当我从它执行命令以从普通服务器收集信息时,普通服务器只会将信息回显到集线器,所以我会知道请求何时到达。这个例子对于 UDP 来说是不是一个不错的选择,因为我听说 UDP 比 TCP 快一些。 同样,如果您可以容忍一些丢包,那么UDP
可能是一个不错的选择。此外,如果您只想传递一些非常简单的东西,那么UDP
可能也是一个不错的选择,但关于聊天消息的传递,我会选择TCP
。两个链接中提供的许多答案都非常有用,请查看。
没问题。祝你好运。【参考方案2】:
这里的HUB服务器的作用我没看懂?您是否允许通过 HUB 服务器在不同聊天室之间传递消息?
正如 Steve 所建议的,我还建议将 TCP 用于基于文本的聊天应用程序。 与基于文本的聊天应用程序一样,所有消息都应该按照发送时的顺序发送。
【讨论】:
HUB服务器是连接所有其他服务器的主服务器。但是 HUB 不做任何消息传递,只有普通服务器处理。 HUB只是将普通服务器连接成一个网络,这样我就可以让每个普通服务器更新聊天室列表供用户选择。【参考方案3】:正如其他人所说,UDP 不保证数据包的传递。但是,如果您的 HUB 恰好位于 NAT 或防火墙后面(如在对等网络中),那么 UDP 为getting around it 提供了优势。在您的情况下,这是我使用 UDP 的唯一原因。如果您需要可靠的、按顺序传送数据包,可以使用诸如 UDT 之类的库来提供帮助。
【讨论】:
【参考方案4】:首先你需要知道什么是 TCP 和 UDP。
TCP
TCP 是一种面向连接的协议。面向连接意味着 通信设备应在传输数据之前建立连接,并且应 传输数据后关闭连接。
UDP UDP是面向数据报的协议。这是因为没有开销 打开连接、保持连接和终止连接。 UDP是 高效的广播和多播类型的网络传输。所以现在您可以看到 TCP 是一种可靠的协议,它将为您提供有关数据包传递的信息/确认,另一方面,UDP 不能保证数据包传递 100% 成功。
针对您在聊天服务中的情况。我的建议是使用 TCP,因为在聊天消息传递中应该 100% 成功。如果数据包传递失败,那么您可以尝试再次发送它,但 UDP 不具备这种功能。
在通过网络进行某些流式传输时可以使用 UDP,在这种情况下最好继续使用 UDP。
因此,如果您只需要在客户端之间聊天,那么最好使用 TCP,因为可以保证传输的数据保持完整并以与发送时相同的顺序到达。
【讨论】:
以上是关于需要帮助决定何时在我的基本聊天网络中使用 UDP over TCP的主要内容,如果未能解决你的问题,请参考以下文章