我正在阅读关于网络编程的关于gafferon的文章,它解释了UDP与TCP的优缺点。
然而,感觉只适用于需要不断输入流的游戏。我正在开发纸牌游戏,我想知道创建多人游戏功能,UDP或TCP的最有效方法是什么。我觉得UDP可能仍然是速度最好的选择,但这引发了更多问题。
如果我使用UDP,数据包丢失的可能性很小,我怎么知道它丢失了?如何从丢失中恢复?
答案 0 :(得分:1)
如何检测邮件丢失?
接收方需要向原始发送方发回一些东西,告诉他收到了消息。如果原始发件人在定义的时间范围内未收到确认,则会重新发送该邮件
另一种方法是默认情况下多次发送每条消息,让接收方忽略重复。
这个规则可能会变得任意复杂,最终你会重新实现TCP的部分内容。您可能还希望确保消息的排序。
UDP适用于频繁更新,在这种情况下丢失某些消息(例如,在第一人称射击游戏中传送视频流或保持玩家位置同步)并不是那么糟糕。纸牌游戏节奏较慢,但需要可靠,有序的消息。如果您不打算与数千名玩家一起举办游戏会话,请使用TCP。它的速度足够快,而且更容易使用。
它只适用于恒定的输入流?
即使您每分钟只发送一条消息,TCP也能正常工作。术语"流导向"基本上意味着接收者不知道消息的结束位置。例如,您必须通过预先设置消息长度来提供协议中的信息。
如果您选择UDP,最好在其上使用库。