2011-04-08 41 views
5

我的问题的关键是询问是否接受使用TCP和UDP在客户端和服务器之间进行通信。在相同的应用程序中使用TCP和UDP的任何问题?

我正在做一个实时的客户端服务器游戏,需要保证(登录等)的通信部分,但其他部分可以丢失数据包(状态更新等)。所以,我想在大多数数据通信中使用UDP,但我不想实现自己的框架来确保我的控制通信(登录)得到保证。

那么,最初使用TCP来管理一个连接,然后在一个单独的端口上发送数据通信包呢?

回答

5

你绝对应该这样做(使用TCP和UDP来完成不同的通信任务。)而且你甚至不必使用两个不同的端口。 One will suffice。您可以在同一个端口上监听两种不同的协议。

0

它不仅被接受,而且被广泛使用。作为一个很好的例子,BATS Exchange在他们的market data分配系统中使用这种方法来实现恢复机制。

2

这是相当合理的,已经在主流使用。即使在浏览Web时,DNS操作也是基于UDP的,HTTP连接是基于TCP的。

请记住,您应该考虑两种连接类型是完全独立的还是采用其他措施来正确处理任何相互依赖关系。 TCP连接在操作系统和网络级别可能存在计时问题,而UDP连接有丢包问题。当应用程序的TCP部分停止或UDP数据包丢失时,应采取特定措施以避免死锁和性能问题。

+0

他们怎么会为彼此造成问题? – 2011-04-08 20:04:31

+1

@gamernb:如果它们是独立的,它们不会,但是如果例如你的TCP服务器等待UDP部分发送数据的通知,那么如果你没有小心处理丢包,它可能会永远等待。 – thkala 2011-04-08 20:13:10

+0

好的,我明白了。我不打算让他们彼此等待。 UDP部分将会无休止地等待状态更新数据包。如果收到,则将其应用于当前客户端状态。 – 2011-04-08 20:16:02

相关问题