在这个广大女性可以放假半天的特别节日里,网易杭州研究院的小伙子们没能休息,反而热火朝天的发布了 GitHub 上广受好评的 Node.js 游戏框架 pomelo 的最新版本 0.3 版。
如果你还不了解这款“柚子”框架,请参见 InfoQ 对框架作者,杭州网易研究院高级研究员谢骋超的专访: 网易NodeJS 开源游戏框架pomelo 访谈,及他在InfoQ 连载的“深入浅出node.js 游戏服务器开发”系列文章。
值得一提的是谢骋超也是本届 QCon 北京 2013 大会的受邀演讲嘉宾,将会在 Node.js 专题中分享 Pomelo 框架的心得体会。
下面让我们了解一下 pomelo 框架的更新内容:
Pomelo 0.3 版为移动端性能优化做了很多工作, 新协议的数据包压缩后的传输量仅为 0.2 版的 20%, 并保留了 0.2 版基于 socket.io 的传输协议。socket.io 对开发浏览器端器端的实时应用非常适合,而 socket(websocket)、protobuf、二进制等协议则对移动端、桌面客户端的开发更具优势。pomelo 对它们的同时支持使同时支持浏览器、移动、桌面客户端的高实时应用或游戏变得非常容易。下面让我们看看 pomelo 的新版本特性:
1. 新协议支持
0.3 版 Pomelo 开始支持二进制协议,并支持对请求 route 的字典压缩和请求内容进行 protobuf 压缩。0.3 版同时兼容以前版本基于 socket.io 的通讯协议。通过在应用中配置不同的 connector component 来实现协议的切换或共存。
目前 Pomelo 服务器提供两类 connector:sioconnector 和 hybridconnector,分别对于基于 socket.io 和二进制的通讯。
2. 动态服务器扩展
Pomelo 0.3 版开始支持动态增加和移除服务器进程机制,并提供相应的命令行工具。每台新增的服务器都会连接到 master 服务器上进行注册。Master 再将新服务器的信息广播给集群中的所有服务器进程。原有的服务器进程再对新增服务器事件进行响应。
当一个服务器进程接收到一个新增服务器的消息后,会将该服务器信息保存到本地的 app 上下文中,之后可以通过 app.getServers 等系列方法查看到新服务器的信息,从而影响之后的消息路由。
如果新加的服务器的类型之前尚未存在于 app 上下文中,Pomelo 会尝试着为其创建对应的 rpc 代理对象。如果该类型服务器需要提供 rpc 服务,则需要在约定的目录(servers/server-type/remote/)下提供 rpc 服务代码。
动态移除服务器进程的流程也与上面类似,当服务器断开与 master 的连接后,master 会将该服务器的信息广播给其他进程,其他进程再进行相应处理。
3. 其他新特性
- servers.json 配置文件的修改:随着 Pomelo 支持协议的增多,配置文件原先定义的 wsPort(代表 websocket port)已不适用,现调整为 clientPort。
- 3.2 新增 channel 广播接口:ChannelService 新增 broadcast 接口,适用于给全世界广播的场景。
- 新增 session 获取接口:LocalSessionService 新增根据 session id 获取 localSession 接口 get 和根据 user id 获取 localSession 接口 getByUid。
- javascript 客户端支持:
- 支持两类 javascript 客户端 — socket.io 与 websocket:目前 socket.io 与 websocket 两套协议在 javascript 都有用武之地。socket.io 的兼容好,可以适应各种浏览器,适合开发类似聊天室这样的高实时应用。websocket 客户端则在数据压缩上做到了很多优化,大大减少了消息的传输量,适合开发基于 HTML 5 的游戏应用。
- 客户端 javscript build 系统:以前的 pomelo-jsclient 版本管理异常混乱, 经常将好几个文件复制到不同的项目各自修改。因此我们引入了 component 来管理 js 的库。 客户端 js 代码目前采用以 component 的形式统一管理与维护。
- 其它客户端支持:
- 提供新的 C 客户端,支持 socket 协议,基于 libuv 开发,提供了完整的数据与消息压缩, 支持 cocos2d-x
- 其余客户端,如 flash,android, ios, unity3d, 目前还只支持 socket.io 协议,后续会推出基于 socket 协议客户端
关于 pomelo 此次升级的其他相关文章,可以参考该项目的 GitHub 页面:
评论