node.js和ActionScript通用的序列化格式?

我的一些朋友正在devise一款游戏,我正在通过实现游戏的后端服务器来帮助他们。 这个游戏是用Flash编写的,我打算在node.js中开发服务器,因为(a)它是学习node.js的一个很酷的项目,(b)它很快,这对于游戏很重要。

服务器的架构是基于服务器和客户端之间发送的消息(有点像Minecraft的服务器协议)。 我到目前为止的消息格式是一个字节(数据包types),两个字节(消息长度)和许多字节(消息数据,这是键值对的映射)。 问题是,我真的不想开发自己的序列化格式(因为虽然我可能可以实现,但与使用现有解决scheme相比,这将是一个痛苦)。

不幸的是,我在为消息数据序列化格式find一个好的候选者时遇到了问题。

  • ActionScript自己的远程格式可能工作,但我不喜欢它太多。
  • JSON在node.js(很明显)和ActionScript中都有支持,但它也是文本的,我更喜欢二进制来提高速度。
  • MessagePack看起来很不错,但我找不到ActionScript实现。 (谷歌代码上有一个名为as3-msgpack,但我得到奇怪的错误,无法访问它。)
  • BSON有一个ActionScript实现,除了MongoDB库之外,没有node.js的支持(我打算使用Redis)。

那么,任何人都可以提供我可能错过的其他序列化格式吗? 或者我应该坚持其中的一个(或滚动我自己的)?

这不就是为什么HTTP支持gzip内容? 只需使用JSON并在发送内容时对其进行gzip压缩。 花费在gzip上的时间不仅仅是通过减less传输延迟来恢复。

查看这篇文章更多关于使用Actionscript的gzip 。 在node.js我认为gzip-compress是相当stream行的。

实际上,如果我在你的鞋子里,我会实施两种方法,并计时。 使用JSON,因为它是常见的,容易做到。 但是,然后实施AMQP,并比较它们。 如果你想大规模地扩大这个范围,那么你可能会发现AMQP更容易。 也。 消息队列正好适合node.js世界观。

Actionscript上的AMQP ,以及node.js上类似的人 。

如果您愿意,可以在客户端JavaScript中创build整个API,并使用JSON作为数据交换格式,然后通过AS调用ExternalInterface与客户端JavaScript API进行通信,这将成为优雅的服务器端解决scheme。

值得注意的是,Flash Player内置了对解压缩gzip压缩数据的支持。 压缩一些JSON对象可能是值得的,比如本地化的string表,游戏configuration数据等,这些数据可以增长到几百kb,但是只能在游戏加载时加载一次。

我正在为AS3制作一个MessagePack版本。 在当前版本中,它执行基本(编码/解码)。 规划未来的stream。 检查项目页面: https : //github.com/loteixeira/as3-msgpack