AICon全球人工智能与机器学习技术大会周四开幕,点击查看完整日程>> 了解详情
写点什么

超低数据传输量,服务器端动态扩展——Node.js 开源游戏框架升级至 0.3 版

  • 2013 年 3 月 08 日
  • 本文字数:1616 字

    阅读完需:约 5 分钟

在这个广大女性可以放假半天的特别节日里,网易杭州研究院的小伙子们没能休息,反而热火朝天的发布了 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 页面:

2013 年 3 月 08 日 04:345022
用户头像

发布了 91 篇内容, 共 31.9 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

Linux之fgrep命令

入门小站

Linux

架构实战营模块 6 作业

蔸蔸

java毕设开发经典选题

清风

毕业设计

kafka核心技术与实战学习笔记(一)

追风少年

kafka

模块六作业

Mr.He

架构实战营

情窦初开,原来喜欢这么可爱的

4ye

Python 后端 8月日更 词云

Rust从0到1-高级特性-类型进阶

rust 高级特性 类型 Types

微信业务架构&学生系统管理系统设计

Geek_dae

架构实战营

如何找到靠谱的工长?

escray

生活记录 8月日更 装修记

面向多场景而设计的 Erda Pipeline

尔达Erda

Go 开源 微服务 云原生 企业数字化转型

Spark 源码阅读 01:环境搭建

程序员赤小豆

spark 技术 Spark 源码

从头配置阿里云服务器

阿Q说代码

SSL证书 8月日更 阿里云服务器 域名备案

【架构训练营】模块六作业

zclau

Spark 源码阅读 02:从 Spark-Submit 到 Driver 启动

程序员赤小豆

spark 技术 Spark 源码

百度地图开发-在地图上实现路线导航 09

Andy阿辉

android Android 小菜鸟 Android端 8月日更

架构实战营第一期--模块六作业

clay

架构实战营

架构训练营模块六作业

喻高咏        

架构实战营

Vue进阶(八十四):Computed 和 Watch 使用与区别

No Silver Bullet

Vue 8月日更

架构训练营 模块六

小卷儿

在线JSON转Schema工具

入门小站

你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?

编程三昧

JavaScript 前端 函数 8月日更 Arguments

用户体验再升级!Erda 1.2 版本正式发布

尔达Erda

Go 云计算 开源 开发者 云原生

电商系统微服务拆分-模块6

小牧ah

架构实战营

苏宁精准测试方案探索和实践

薛飞

精准测试

架构实战营模块6作业

zlz

Lua 入门到精通( 01 Lua 简介以及软件安装)《做一个脚本高手》

陈皮的JavaLib

lua Linux 运维 脚本语言 8月日更

拆分电商系统为微服务

木云先森

架构实战营

技术调研,IDEA 插件怎么开发「脚手架、低代码可视化编排、接口生成测试」?

小傅哥

Java 小傅哥 低代码 IDEA 脚手架

详解可观测性监控系统中的“金三角”

尔达Erda

开源 微服务 运维 云原生 APM

html创建表格有那些小技巧,表单中真的有这么多功能吗

前端史塔克

html html5 前端 html/css JavaScrip

模块六作业 - 电商系统微服务

babos

#架构实战营

数据cool谈(第2期)寻找下一代企业级数据库

数据cool谈(第2期)寻找下一代企业级数据库

超低数据传输量,服务器端动态扩展——Node.js开源游戏框架升级至0.3版-InfoQ