在MessageBox上输入数据?

时间:2013-07-22 10:03:17

标签: serialization ipc deserialization dart game-engine

我正在考虑编写基于Dart的浏览器游戏。我喜欢将核心游戏逻辑与客户端渲染和事件处理代码分开。这样我就可以在多人游戏系统中的服务器Dart VM端运行相同的逻辑代码。这就是今天许多游戏所做的事情(例如Quake系列):即使您玩单人游戏,您也拥有本地服务器。

所以在我的场景中:

  • 事件处理和渲染在主浏览器线程上运行(渲染循环由requestAnimationFrame
  • 触发
  • 游戏逻辑在单独的Isolate中运行(实际上是浏览器中的WebWorker
  • 对于通信,我使用的是MessageBoxes,设置和管理有点麻烦,但这是可能的。如果逻辑在服务器上运行,则可以稍后与WebSocket交换。

逻辑隔离向主线程循环发送关于游戏事件的消息(如游戏对象的状态正在更新,地图更改等),主线程发布客户端事件(基于按键的播放器移动,命令)逻辑。

我想知道在这一层管理邮件的最佳方式是什么。从MessageBox的文档:“消息的内容可以是:原始值(null,num,bool,double,String),IsolateSinks的实例,以及其元素是其中任何一个的列表和映射。”这些都适用于简单的数据传输,但如果我想传递整个数据bean呢?我找到的唯一解决方案是JSON序列化,可以使用JsonObject相对轻松地完成。现在我们有一个可以通过MessageBox / WebSocket传递的String。

我想知道这个设计有多好?对连接上的每个数据进行JSON序列化和反序列化。我很担心这个引入的开销,这个频道会被大量使用。

我能做些什么来改善这个?

1 个答案:

答案 0 :(得分:1)

有几种可能性:

  1. 发送打印数据列表有效吗? VM应该能够在隔离区之间传输类型化数据列表。不确定dart2js如何处理事情。
  2. 将二进制数据和base64编码为字符串进行传输。这将比纯二进制数据(1.2倍的空间增加)稍微小一些,但是可以工作。
  3. 约翰