【问题标题】:Game server with ZMQ sockets带有 ZMQ 套接字的游戏服务器
【发布时间】:2013-09-08 20:17:57
【问题描述】:

我尝试使用 ZMQ 套接字编写游戏服务器。服务器使用 ZMQ_REP 套接字,客户端使用 ZMQ_REQ 套接字。

这仅在连接一个客户端时有效。如果我连接第二个客户端,那么服务器和第一个客户端之间的通信就会中断。

哪种服务器客户端模式适用于一台服务器和多个客户端?

【问题讨论】:

  • 对于一个游戏,您可能需要请求-回复和发布-订阅。您将使用长时间运行的 pub-sub 会话让服务器将全局状态更新推送到客户端,并且您将使用短暂的 req-rep 客户端来传输玩家操作并立即获得答案。 (免责声明:我从未真正编写过多人游戏,这更像是基于 0MQ 文档的直觉。)
  • 同样通过文档,我不明白这是怎么发生的:“如果我连接第二个客户端,那么服务器和第一个客户端之间的通信就会中断。”它们强烈暗示ZMQ_REP 套接字上的传入请求已排队,并且服务器最终会在假设它没有过载的情况下到达所有这些请求。您可能希望显示一些代码,说明您实际在做什么以及您发现第一个客户端断开连接的位置。
  • @millimoose 使用异步 REQ/REP,由于其阻塞特性,同步对于实际应用来说太脆弱了。
  • @raffian 您可以通过使用专用于 REQ/REP 的不同线程来克服阻塞性质。您还可以按照 0MQ 指南中的说明轮询多个套接字。

标签: zeromq


【解决方案1】:

对于服务器,您要使用 ROUTER,对于客户端,您要使用 DEALER。 ZeroMQ 指南中有很多这样的例子。当您尝试自己的简单模型时,值得一读(或购买这本书)并学习不同的模式。不要尝试构建任何过于复杂而无法开始的东西。

【讨论】:

  • 我现在使用了两个线程,并为每个客户端使用了不同的套接字。只有两个玩家,这适用于 REQ 和 REP 组合。这不是最好的解决方案,但它确实有效。
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 2014-04-12
  • 1970-01-01
  • 2019-01-05
  • 2016-02-24
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
相关资源
最近更新 更多