java - 服务器上使用 RPC 的多人纸牌游戏

标签 java python optimization webserver multiplayer

基本上,我想要一个在服务器上运行的 Java、Python 或 C++ 脚本,监听玩家实例:加入、跟注、下注、弃牌、抽牌等,并且还有一个超时,用于玩家离开或断开连接。

基本上,我希望这些操作中的每一个都是一个小请求,这样玩家可以是同一台机器上与游戏服务器对话的进程,也可以是跨网络的机器。

消息的安全性不是问题,这是为了学习/研究/娱乐。

我的优先事项:

  1. 有一个很好的方案来检测玩家何时断开连接,但也能够在启动/导致输掉之前解决网络延迟等问题。
  2. 速度。我将尽可能快地玩数百万这样的手牌。
  3. 在共享服务器实例上运行(我可能对端口或需要 root 的东西的访问权限有限)

我的问题:

  1. 监听端口或使用套接字或 HTTP 端口 80 apache 监听脚本? (我对它们之间的区别有点模糊)。
  2. 有什么好的框架可以使用吗?
  3. 消息类型?我在考虑 JSON 或 Protocol Buffers。
  4. 如何让它变快?

谢谢大家 - 只是在寻找一些指示和建议。我认为这是一个很酷的问题,有很多巧妙的事情可以学习。

最佳答案

就框架而言,Ginkgo看起来很有希望构建网络服务(这就是你正在做的)。 Python 非常简单,异步性由 gevent 启用让你做异步的事情而不必担心回调。 gevent 核心还允许您访问 lot of building blocks。 .

与其让大量服务通过端口进行通信,不如查看 1) 一个好的消息队列,例如 RabbitMQ0mq , 或 2) 分布式协调服务器,如 Zookeeper .

话虽这么说,但您的目标很难实现,尤其是在您不熟悉基础知识的情况下。学习这些基础知识是值得的。

一开始不要担心速度。让它工作,然后让它扩展。当然,有一些方向可以让您在未来更容易扩展。 Zookeeper特别是为您提供了易于实现的水平扩展原语(即多个工作人员分担负载)。特别是,请参阅 Zookeeper recipe book及其对应的python implementations (由基于 gevent 的客户端库 kazoo 提供)。

不要忘记,“快速”还意味着优化您自己的开发时间,以实现更快的迭代和更少的时间来破坏您的开发环境。所以使用 Python,它可以让你现在快速启动并运行,如果你真的开始绑定(bind) CPU 时间或内存使用,稍后再进行优化。 (对于这个特定的应用程序,您更有可能绑定(bind)到网络 IO。)

关于java - 服务器上使用 RPC 的多人纸牌游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945278/

相关文章:

java - wsdlLocation 未获取 wsdl

c++ - 编译器生成昂贵的MOVZX指令

python - 递归方程中的尾调用优化

java - 你什么时候会使用 builder 模式?

java - 列表与列表<Object>

python - 比较列表相似度 Python

python - geopandas.explore - 如何绘制多个图层?

Python不显示小数

php - 将 url 字符串(路径和参数)解析为数组

java - 有什么方法可以自动将 Javascript 库桥接到 GWT?