游戏服务器编程(可靠和不可靠通信)

Game server programming (reliable and unreliable communication)

我目前正在使用 C# 通过 .NET 套接字开发一个简单的在线多人游戏。

更准确地说,我正在尝试围绕这款游戏创建网络通信结构——与其说是游戏本身。现在我有一个可以处理基本请求的工作 HTTP 服务器,比如 "create a new game instance (party)"、"join an existing party" 等

这工作正常,但我真的不知道如何处理游戏实例内部的通信。根据我的理解,应该有可靠的通信和不可靠的通信。比如发送 "kick player"、"pause game"、"get player list" 请求(可靠)和发送输入、接收快照(不可靠)。

这是否意味着在不同的端口上有两个单独的套接字(udp 和 tcp)运行 有意义,所以我实际上有两个服务器可以与每个游戏实例进行通信?或者有没有办法通过一个 udp 套接字同时实现有保证的传送和不可靠的传送?

注意:我并不是真的希望有序的数据包到达,所以对我来说可靠主要是确保数据包真正到达目的地

注意 2:我真的不想用这个特定于游戏实例的可靠的东西来打扰 http 服务器,在我看来,如果游戏实例可以自己处理这个会更好

我看到 很相似,但接受的答案并没有真正帮助我。我对答案的疑问是:如何在 C# 中通过 .NET 套接字组合可靠和不可靠的通信?

您不一定必须使用单独的端口 - 事实上,只使用一个端口来简化您的最终用户在必要时打开其路由器上的入站端口所需的任何指令将是一个优势。

查看 libenet (http://enet.bespin.org),了解一个开源库,它负责处理一个端口上的多个连接。它支持有保证的顺序流和不可靠的流。