可用的游戏网络协议定义语言和代码生成

2024-01-15

我一直在寻找一个好的通用二进制网络协议定义框架,以提供一种用多种语言(例如 Java 后端服务器和 iPhone 前端)编写实时游戏服务器和客户端(例如《魔兽世界》或《雷神之锤 III》)的方法用 Objective-C 和 Cocoa 编写的客户端)。

我想支持 Windows 上的 Java Flash 客户端、iPhone 客户端和 C# 客户端(以及 XBOX 上的 XNA 客户端)。

我正在寻找一种通过 TCP/IP 或 UDP 套接字流连接有效发送/接收消息的方法。我并不是在寻找可以通过 HTTP Web 服务发送的内容,例如 JSON 或 XML 编组对象。虽然 Hessian 的二进制 Web 服务协议是一个非常有趣的解决方案

我想要一种网络协议格式和客户端/服务器基本实现,允许客户端连接到服务器并发送定义协议中的任何消息并接收协议中的任何消息,而无需绑定到某种 RPC 端点。我想要协议传入和传出的任何消息的通用流。这样我就可以支持诸如服务器每 100 毫秒向所有客户端发送游戏中各个实体的位置之类的事情。


我找到的网络协议框架如下:

  1. 谷歌的协议缓冲区 http://code.google.com/p/protobuf/- 但它缺乏对从给定协议发送/接收任意消息之类的支持。
  2. 阿帕奇节俭 http://incubator.apache.org/thrift/- 一个有趣的选项,但它主要面向 RPC,而不是通用游戏客户端/服务器套接字类型连接,其中客户端或服务器可以随时发送消息,而不仅仅是响应客户端 RPC 请求。
  3. Raknet 多人游戏 http://www.jenkinssoftware.com/- Raknet 提供完整的多人游戏网络库(对于收入低于 25 万美元的独立开发免费)

UPDATE:Oculus VR 收购了 RakNet,现在它是免费/开源的。你可以找到它Github https://github.com/OculusVR/RakNet

  1. 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(使用前将#替换为@)

可用的游戏网络协议定义语言和代码生成 的相关文章

  • SCTP 与多宿主作为 TCP 的直接替代品

    SCTP具有本机多宿主支持 如果我理解正确的话 如果主接口出现故障 它将自动通过辅助 NIC 重新路由您的数据包 我通过编写一个自定义路由守护程序来使用 TCP 复制此功能 以便在我的主 NIC 出现故障时修改路由表 我想尝试使用SCTP反
  • 无法访问生成配置管理器或 Visual C# 2010 Express 中的生成配置

    完整故事 通常 当我安装 Visual C 2010 Express 时 我做的第一件事就是切换到专家设置 这使我可以访问构建配置以及相应的管理器 最近的安装似乎行为不当 我创建的第一个项目是 XNA 4 0 刷新 项目 我导入了一些旧代码
  • 在 Xna/MonoGame 中按程序生成 Texture2D

    如何使用代码按程序生成Texture2D 例如 我希望在 32x32 图像上交替出现黑白像素 您可以使用 GraphicsDevice 创建一个新的纹理 public static Texture2D CreateTexture Graph
  • 如何直接从protobuf创建GRPC客户端而不将其编译成java代码

    使用 gRPC 时 我们需要通过协议缓冲区编译器 protoc 或使用 Gradle 或 Maven protoc 构建插件从 proto 服务定义生成 gRPC 客户端和服务器接口 Flow now protobuf file gt ja
  • MonoGame / XNA 在 Spritebatch 中绘制多边形

    我目前正在使用 MonoGame 编写游戏 我需要绘制纹理形状 我想绘制有 4 个角的多边形 我所有的渲染都是通过 spritebatch 完成的 我尝试使用 TriangleStripes 但它对我来说效果不太好 因为我没有任何着色器经验
  • IPv4 允许的最大 TCP/IP 网络端口号是多少?

    可以使用的最大端口号是多少 端口号是一个无符号 16 位整数 即 65535
  • 如果 GraphicsDevice 出现问题,是否可以恢复它?

    我有我的游戏有这个讨厌的问题 https stackoverflow com questions 16225701 how to prevent graphicsdevice from being disposed when applyin
  • 如何在 Tensorflow 2.0 中使用 K.get_session 或如何迁移它?

    def init self kwargs self dict update self defaults set up default values self dict update kwargs and update with user o
  • C# .net 协议缓冲区 - protobuf-net 支持序列化对象值字典吗?

    我是协议缓冲区的新手 我正在使用 VS2010 的 protobuf net 从我在这里读到的内容协议缓冲区中的字典 https stackoverflow com questions 4194845 dictionary in proto
  • Protobuf-java:合并两个原始对象而不连接重复字段

    我想合并两个复杂的原型对象protoA and protoB类型相同 如果两个对象中都设置了字段 则protoB应在生成的原型中设置 我可以使用 mergeFrom 功能 protoA toBuilder mergeFrom protoB
  • 什么定义了实时/近实时系统?

    系统是否应满足特定的指标才能被视为 分类为实时 Web 应用程序或近实时 Web 应用程序 当我看到我正在使用的系统的非功能性需求表明解决方案应实时 接近实时返回数据时 我理解这些术语的定义 如发现http en wikipedia org
  • 仅使用视频标签实时流式传输到 HTML5(不带 webrtc)

    我想将实时编码数据包装到 webm 或 ogv 并将其发送到 html5 浏览器 webm 或 ogv 可以做到这一点吗 Mp4 由于其 MDAT 原子而无法做到这一点 无法实时将h264和mp3打包并发送给客户端 假设我正在从网络摄像头输
  • 基于组件的游戏设计中的共享字段

    我认为这是使用 XNA 在 C 中完成基于组件的游戏引擎之前的最后一个逻辑飞跃 我定义了实体类和抽象组件 我的问题出现在我的 EntityFactory 中 当我想创建一个新实体时 我将 EntityType 枚举传递给工厂中的静态方法 然
  • 将 JSON 对象转换为 protobuf IStruct

    我正在使用Nodejs 的 Dialogflow API https cloud google com nodejs docs reference dialogflow 0 8 x google cloud dialogflow v2 这个
  • XNA:Unload() 的意义是什么?

    XNA 游戏有一个Unload 方法 其中内容应该被卸载 但这有什么意义呢 如果所有内容都被卸载 那么游戏一定会退出 在这种情况下 无论如何 所有内容都会被垃圾收集 对吗 据我了解 它对于任何标准用途都没有用 因为正如您所说 垃圾收集器为您
  • Thrift 与 Protocol Buffers 最大的区别是什么? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 最大的优点和缺点是什么阿帕奇节俭 http incubator apache org thrift vs Google 的协议缓冲区 http
  • SoundEffect 和 SoundEffectInstance 类之间的区别

    就像有问题一样 我不明白使用这些类有什么区别 每个类别的优点和局限性是什么 我读了很多教程 但仍然无法决定我应该做什么 为了让事情更清楚 我得到了 AudioModule AudioEmitterComponent 和 AudioListe
  • Windows Phone 自定义着色器错误?

    在 Windows Phone XNA 4 0 中 我在编译时收到以下错误 Windows Phone平台不支持自定义着色器 这真的很烦人 因为我有一个 Xbox 360 版本的项目 还有一个 Windows 版本的项目 我尝试使用基于编译
  • 风暴最大喷口待定

    这是一个关于 Storm 的最大喷口待处理如何工作的问题 我目前有一个 spout 它读取文件并为文件中的每一行发出一个元组 我知道 Storm 不是处理文件的最佳解决方案 但我对此问题没有选择 我设置了topology max spout
  • 基于非 HTTP 协议的 REST 示例

    REST 在 HTTP 之外的其他协议上的工作效果如何 对于使用 REST 或可能使用 REST 的协议 是否有任何好的示例 我认为你不会找到很多 但是here https datatracker ietf org doc draft ie

随机推荐

  • 使用存储库模式时的 MongoDB 和大型数据集

    好的 在工作中我们正在使用 MVC C 和 MongoDB 开发一个系统 当第一次开发时 我们决定遵循存储库模式可能是一个好主意 真是太痛苦了 下面的代码可以让您了解当前实现的内容 MongoRepository 类 public clas
  • NOT NULL 约束失败 Django CreateView

    我想在这个项目上实现两个目标 首先 我想将登录用户保存为审阅者 其次 我想将外键中的律师值传递到审核表单中 这样 用户可以点击律师详细信息页面上的审查链接进行审查 并审查该律师而不是其他人 我一直在实现第一个目标 但出现了这个错误 erro
  • Java - Jackson 嵌套数组

    鉴于以下数据 version 1 data 1 2 3 4 5 6 我尝试了以下定义并使用ObjectMapper readValue jsonstring Outer class class Outer public int versio
  • 在 django 后端自动增加新发票的发票编号

    我想自动递增发票号码 即 3 位字符和 4 位数字 class Invoice invoice no models CharField max length 500 null True blank True validators Regex
  • ChoiceField.choices 可调用对象如何知道要返回哪些选项?

    在 Django 1 8 中 ChoiceField s choices参数可以接受可调用的 def get choices return 1 one 2 two class MyForm forms Form my choice fiel
  • 不会向内部用户发送 TestFlight 邀请电子邮件

    我为 TestFlight 设置了我的应用程序 对于外部用户 它正在等待审核 但如果我想邀请内部用户 我会选择他们并按邀请 iTunes Connects 表示他们现在已收到邀请 但受邀请的电子邮件均未收到邀请电子邮件 你知道我做错了什么吗
  • GRAV 子导航

    我尝试制作我的第一个网站GRAV http getgrav org内容管理系统 现在在我的pages folder它看起来像这样 主页 默认 md about 关于 seite1 default md 关于 seite2 default m
  • 带工具提示的 WPF 自定义验证器

    我想为我的 WPF 应用程序创建一个自定义验证器模板 我有一个工具提示模板
  • Linq2Sql 将记录插入相关表

    类似情况 如何使用 LINQ2SQL 添加多个相关记录 https stackoverflow com questions 630320 how to add several dependent records with linq2sql
  • 这里 JavaScript API 3.0 - 如何实现可拖动标记

    我想用最近发布的 JavaScript API 3 0 实现一个可拖动标记 使用旧的 API 非常简单 将draggable 属性设置为true 后 您可以移动地图上的标记 位于 此处 1 的新 API 3 0 的迁移指南指出 在地图对象上
  • 为什么 Android 上的 Chrome 原生 HTML5 日期选择器变得非常慢?

    我的网站上有一个日期选择器 它只使用默认的 html5 日期选择器 我注意到 直到几周前 它都工作正常 但自从 Chrome Android 最近更新后 他们引入了一个新的日期选择器 而这个日期选择器真的很慢而且反应迟钝 加载需要几秒钟 我
  • 如何在Java中扩展final类

    这是我现在面临的实际问题 我有课 比方说Foo这个类定义了一个名为的方法getBar返回一个Bar实例 班上Bar被定义在里面Foo并且 并 被声明public static final 我想做的是定义一个类MyFoo延伸Foo但我也想延长
  • SQL简单减法查询

    我有一个数据库 它包含 2 个表 让我将它们称为表 A 和表 B 表A内容 Date 供应商名称 交付货物名称 交付的货物数量 简单地说是成分 A 数值 表B内容 生产日期 产品名称 成分 A 我真正想要的是 使用表 A 第 4 列减去 减
  • “Options”属性的默认值无法绑定到特定线程

    我发现当我改变班级时 public class MarkdownEditorOptions ObservableObject to public class MarkdownEditorOptions INotifyPropertyChan
  • 插入图像/PNG ggplot2 - Cowplot

    我正在尝试使用cowplot包draw image 功能 我已经设法在图表中获取图像作为示例 我无法弄清楚 xy 位置是如何工作的 我必须不断输入随机数 直到看到图像 require ggplot2 required packages re
  • 更改 Visual Studio 2008 项目中文件夹中整个文件的属性

    我通过从资源管理器中拖放来向我的 Visual Studio 2008 项目添加一个文件夹 我想将该文件夹中整个文件的 复制到输出目录 属性更改为 始终复制 问题是该文件夹包含许多子文件夹 子文件夹也是如此 因此 无法一步阻止所有文件并更改
  • MongoDB 查找精确数组匹配但顺序并不重要

    我正在查询查找精确的数组匹配并成功检索它 但是当我尝试查找具有不同顺序的值的精确数组时 它会失败 Example db coll insert user harsh hobbies 1 2 3 db coll insert user kau
  • 使用 Selenium WebDriver 将鼠标悬停并单击隐藏元素

    当我开始使用 Selenium 时 我发现很难对隐藏元素执行操作 悬停 单击等 这些元素只有在悬停在其他元素上时才可见 所以我希望这对其他人有帮助 您可以使用以下任何一种方法 例如 要upvote此页面中的评论 我需要将鼠标悬停在上下文 即
  • Google API - 如何将 URL 重定向到我的本地主机

    我正在努力使用 Google OAuth 将 google 登录集成到我的 Phonegap 应用程序中 发生的情况是 在为我的应用程序创建客户端 ID 时 我必须选择 已安装的应用程序 然后将应用程序类型选择为 其他 因为我是使用 Pho
  • 可用的游戏网络协议定义语言和代码生成

    我一直在寻找一个好的通用二进制网络协议定义框架 以提供一种用多种语言 例如 Java 后端服务器和 iPhone 前端 编写实时游戏服务器和客户端 例如 魔兽世界 或 雷神之锤 III 的方法用 Objective C 和 Cocoa 编写