我一直在寻找一个好的通用二进制网络协议定义框架,以提供一种用多种语言(例如 Java 后端服务器和 iPhone 前端)编写实时游戏服务器和客户端(例如《魔兽世界》或《雷神之锤 III》)的方法用 Objective-C 和 Cocoa 编写的客户端)。
我想支持 Windows 上的 Java Flash 客户端、iPhone 客户端和 C# 客户端(以及 XBOX 上的 XNA 客户端)。
我正在寻找一种通过 TCP/IP 或 UDP 套接字流连接有效发送/接收消息的方法。我并不是在寻找可以通过 HTTP Web 服务发送的内容,例如 JSON 或 XML 编组对象。虽然 Hessian 的二进制 Web 服务协议是一个非常有趣的解决方案
我想要一种网络协议格式和客户端/服务器基本实现,允许客户端连接到服务器并发送定义协议中的任何消息并接收协议中的任何消息,而无需绑定到某种 RPC 端点。我想要协议传入和传出的任何消息的通用流。这样我就可以支持诸如服务器每 100 毫秒向所有客户端发送游戏中各个实体的位置之类的事情。
我找到的网络协议框架如下:
-
谷歌的协议缓冲区 http://code.google.com/p/protobuf/- 但它缺乏对从给定协议发送/接收任意消息之类的支持。
-
阿帕奇节俭 http://incubator.apache.org/thrift/- 一个有趣的选项,但它主要面向 RPC,而不是通用游戏客户端/服务器套接字类型连接,其中客户端或服务器可以随时发送消息,而不仅仅是响应客户端 RPC 请求。
-
Raknet 多人游戏 http://www.jenkinssoftware.com/- Raknet 提供完整的多人游戏网络库(对于收入低于 25 万美元的独立开发免费)
UPDATE:Oculus VR 收购了 RakNet,现在它是免费/开源的。你可以找到它Github https://github.com/OculusVR/RakNet
-
Hessian 二进制 Web 服务协议 http://hessian.caucho.com/- 是 HTTP Web 服务二进制协议,它非常适合发送二进制数据,无需使用附件扩展协议。
Raknet 提供了一个良好的面向游戏/模拟的多人游戏库。
Apache Thrift 和 Google 的协议缓冲区似乎是在游戏网络协议客户端/服务器架构中使用的最简单方法。
如果您想使用某种类型的服务器推送技术(如 Java 或 Flash 客户端)创建基于 Web 的游戏服务器,Hessian 似乎非常适合COMET http://alex.dojotoolkit.org/2006/03/comet-low-latency-data-for-the-browser/。 Hessian 可能会提供一种非常有趣的方式来支持网络上的实时游戏,甚至能够将它们托管在 Google 的 App 引擎或亚马逊的 EC2 等 VM Web 解决方案上。
有一些关于将各种协议定义框架用于游戏和其他用途的讨论:
- 各种序列化框架的比较 http://code.google.com/p/thrift-protobuf-compare/wiki/Benchmarking
-
Thrift 与 Protocol Buffers http://stuartsierra.com/2008/07/10/thrift-vs-protocol-buffers- Thrift 被认为是更好的框架,因为它具有完全支持的 RPC 客户端/服务器实现
-
使用客户端服务器游戏 API 的协议缓冲区确定要解码的消息类型 http://groups.google.com/group/protobuf/browse_thread/thread/c2b514f50554c910/6849f9539a030d3f?hl=en#6849f9539a030d3f
- 使用 Thrift 的双向 RPC http://mail-archives.apache.org/mod_mbox/incubator-thrift-user/200904.mbox/%3Cfba570180904032145j32beb3darb18d276025b033fe@mail.gmail.com%3E
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)