【问题标题】:TCP vs Enet for online card game with lobby?TCP vs Enet 用于带大厅的在线纸牌游戏?
【发布时间】:2012-04-09 14:06:44
【问题描述】:

我正在为 PC 开发一款在线回合制纸牌游戏。它有一个大厅,可以自动更新活动游戏列表,所以我会向许多客户发送许多更新。我将为此准备一个游戏服务器。延迟对我来说并不是什么大问题,如果玩家有时必须额外等待 1/4 秒才能显示他们的卡片,我并不关心。我关心的是可靠性和稳定性。我希望能够主持许多 4 人游戏,我也允许人们观看特定的游戏。

我还需要让他们登录,并在他们断开连接时记住他们的会话,以便他们在断开连接时重新进入游戏。

我正在争论的是,我是否应该使用基于 UDP 且具有可靠性的 Enet,还是使用普通的旧 TCP/IP。

我最终需要能够以 zip 文件的形式向他们发送其他创建的内容,例如额外的套牌。但为此,我确信有一个库可以帮助我从 HTTP 源获取这些内容。

如果有人对这两种方法或两种方法都有经验,我会很感激您的意见。

谢谢

【问题讨论】:

  • 你所说的会话管理肯定会让我倾向于 TCP/IP。但我对 Enet 不熟悉,无法给出更自信的答案。

标签: c++ networking tcp enet


【解决方案1】:

我会坚持使用经典的 TCP,而不是某些库将正确的顺序和数据包传递可靠性侵入到不是为它设计的协议中。

Enet 声称拥有 TCP 的一些好处,同时为“实时”游戏提供速度。这句话让我想到了 FPS,它根本不是你的应用。

【讨论】:

  • 我同意,因为您不太关心速度,所以没有使用基于 UDP 的库的动机。
【解决方案2】:

我没有使用过 ENet,但我快速阅读了它的文档,它似乎在某些情况下很有用。

第一个问题:你需要一个可靠的数据包传递机制,还是不可靠的可以? ENet 可以做到可靠,但在这一点上它有点类似于 TCP,除非你需要它的多流支持,否则我不确定它是否值得愚弄。

如果不可靠也可以,那么接下来的问题是:你需要ENet所具备的数据包分片支持吗?如果您的数据包很小,那么我会说直接使用UDP。

我不清楚 ENet 如何使用 UDP 套接字以及它如何管理连接,所以我不清楚你是使用大量打开的 TCP 套接字还是打开大量的 ENet 连接更好。

【讨论】:

  • 我需要可靠的有序数据包,因为游戏需要按顺序进行。
猜你喜欢
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多