在同一个应用程序中同时使用TCP和UDP会有什么问题吗?

5
我的问题是询问在客户端和服务器之间使用TCP和UDP通信是否被接受。 我正在制作一个实时客户端服务器游戏,其中部分通信需要保证(登录等),但其他部分可以丢失数据包(状态更新等)。因此,我想在大多数数据通信中使用UDP,但我不想自己实现框架来确保我的控制通信(登录)得到保证。 那么,最初使用TCP管理连接,然后在另一个端口发送数据通信包是否合理?
3个回答

5
你应该绝对按照这种方式进行操作(使用TCP和UDP来完成不同的通信任务)。而且你甚至不需要使用两个不同的端口。一个端口就足够了。你可以在同一个端口上监听这两种不同的协议。

2

这种做法在主流中是相当合理且已经被广泛使用。即使在浏览 Web 时,DNS 操作也是基于 UDP,而 HTTP 连接则是基于 TCP。

请记住,您应该将这两种连接类型视为完全独立,或者采取其他措施以正确处理任何相互依赖性。TCP 连接可能存在操作系统和网络级别的定时问题,UDP 连接则有数据包丢失问题。当您的应用程序的 TCP 部分停顿或 UDP 数据包丢失时,您应该采取具体措施以避免死锁和性能问题。


它们如何会相互造成问题? - Nick Banks
1
如果它们是独立的,那么不会出现问题,但是例如,如果您的TCP服务器等待来自UDP部分的通知以发送数据,则如果您没有注意处理数据包丢失,它可能会一直等待下去... - thkala
好的,我明白了。我不打算让它们互相等待。UDP 部分只是无限地等待状态更新数据包。如果接收到,它会将其应用于当前客户端状态。 - Nick Banks
thkala 意味着这样的情况:例如,您正在 TCP 连接上等待消息 A,稍后又在 UDP 上等待消息 B。而且这些消息甚至可以以此顺序通过网络传输,但由于操作系统中 TCP 和 UDP 栈的差异,消息 B 可能会先传递到您的应用程序。在设计协议消息流并处理这种和类似情况时,您应该小心谨慎。 - Zuljin

0

这种方法不仅被接受,而且被广泛使用。例如,BATS Exchange 在其 市场数据 分发系统中使用这种方法来实现恢复机制。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接