我最近一直在为我用 C# 和 XNA for PC 制作的 2D 射击游戏编写 UDP 服务器,它将在需要时更新和发送世界数据、实体数据、聊天数据等。
最近,当我为玩家创造一种改变武器的方法时,我突然想到了一个问题;如果在发送到服务器请求更换武器的数据包丢失的情况下会发生什么?这个问题让我想到了另一个问题;如何让客户端和服务器确认接收到某些数据包或数据块?
所以,我想出了以下简单的解决方案来解决这个问题:
- 服务器发送需要确认的数据包。
- 客户端接收数据包并发送确认数据包。
- 服务器检查客户端是否确认数据。如果客户端没有,则重新发送数据。
建议的解决方案看起来不错,但是如果在确认包丢失或发生任何意外情况时会发生什么?
更好的解决方案是创建一个使用 TCP 和 UDP 的服务器和客户端;TCP用于需要到达那里并按顺序到达的数据/和平,而UDP用于需要快速到达那里并且可以处理丢失或错误的数据?
如果 TCP/UDP 服务器和客户端是更好的选择,那么风险是什么?我将如何去实现它?
谢谢。