写点什么

网易 NodeJS 开源游戏框架 pomelo 访谈

  • 2012-11-20
  • 本文字数:2764 字

    阅读完需:约 9 分钟

被采访者介绍:

谢骋超,网易杭州研究高级程序专家,2006 年浙江大学硕士毕业后加入网易,参与过网易博客开发,主持过博客圈子,及开放平台等开发,2 年前转向游戏开发领域。 专注于服务端开发技术,对高性能高并发网站(游戏)的架构设计、调优有较丰富经验。 对 node.js 与 java 开发有丰富的经验。目前是 pomelo 开源游戏框架负责人。微博: @圈圈套圈圈 twitter: @xiecc

谢骋超曾在 9 月份的 HuJS 活动中分享过“Node.js 游戏服务器开发 ”的话题。目前他准备对相关研究成果 pomelo 框架进行开源发布,InfoQ 对其进行了专访。

InfoQ:能不能介绍一下 pomelo 的起因及发展历程?

从 2011 年下半年开始, 我们在游戏开发上有了些积累,希望在游戏服务器上有更前沿的研究,在技术选型时我们比较了 erlang, node.js,java 等多种语言,发现 node 很适合做开发游戏服务器,它的事件 IO 模型与单线程应用模型跟游戏服务器简直是绝配。于是在 2011 年 11 月, 我们正式立项并取名项目为 pomelo。

项目的开发经历了原型、框架开发、demo 开发,性能优化, 不断重构、调优、整理等几个阶段。

我们的原型开发只经历了一个月, 当时做了个很简单的捡宝游戏; 框架的抽取和开发是项目最难的阶段, 要定义抽象出框架模型很难, 而且我们是多进程的应用框架, 完全没有蓝本参考, 到了 2012 年 4 月终于完成了框架雏形;之后的 demo 开发比较快, 我们用了一个半月时间就搭建了一个 HTML5 客户端的网页版的 MMORPG, 并在 6 月底的 node party 上小试牛刀了一把;然后我们用了两个月时间做压力测试和性能调优,做了一些性能优化的工具,并把遇到的性能瓶颈都解决了;到了 9 月之后我们的主要工作就是重构、文档, 不断地优化接口,并在 11 月 20 日左右开源我们的框架。

InfoQ:给这个框架命名为“pomelo”的含义是什么?它有什么特点?

pomelo 的中文含义是柚子, 当时是想借某水果公司的光环,而且这个名字够短, 读起来也有点酷酷的感觉。我们的 logo 是切成两半的柚子, 代表着分享、开源。

pomelo 包含了框架、工具集、库三部分。它最大的特点是将易用性和可伸缩性结合得非常好,我们会发现写一个非常复杂的多进程游戏运行架构只需要很少的代码。

InfoQ:请介绍一下 pomelo 在网易的使用情况吧。另外你觉得它最适合的应用领域是什么?

pomelo 到现在为止刚刚一年,刚刚可以使用,目前公司内部的一些团队正在试用, 但还没有在网易线上的游戏中使用。 它最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端,开发者会发现 pomelo 可以用如此少的代码达到强大的扩展性和伸缩性。 当然还不仅仅是游戏,很多人断言未来的 web 时代是实时 web 应用的时代, 我们发现用 pomelo 开发高实时 web 应用也如此合适, 而且伸缩性比其它框架好。

我们不推荐将 pomelo 用于大型的 MMO rpg 游戏开发,尤其是 3d 游戏, 还是需要象 bigworld 这样的商用引擎来支撑。

InfoQ:pomelo 面向的群体是哪些人?要掌握其使用需要哪些技能?有哪些资源可供开发者学习和应用?

pomelo 面向的群体是国内外网页、移动、社交游戏的开发团队,或开发高实时 web 应用的团队,即使以前没有游戏开发的经验,通过简单的学习也很容易上手。

pomelo 的目标是让本来游戏开发经验不多的人能迅速上手开发游戏,而且做出的游戏天然有很强的扩展性和可伸缩性,可直接在产品环境上跑,而不象一些游戏教程只能做出支撑很少在线用户。

开发者需要掌握 javascript 和 node.js 的开发知识, 也要学习一下 pomelo 框架。幸好这几项技术都比较容易上手, node.js 的异步事件 io 需要一点点时间适应, 但这样的学习完全是值的。

node.js 的学习可以去 node.js 官网: nodej.org ,cnode 社区 cnodej.org infoq 的 node 社区内容也不错, howtonode 是个不错的学习博客,只是最近更新稍慢。

pomelo 的学习可以去我们的 wiki , pomelo 的官方网站,和pomelo 的 github

InfoQ:现在有没有和 pomelo 类似的框架?能否请比较一下他们的优势与劣势?

目前没有发现与 pomelo 完全类似的框架, 尤其将多进程应用架构和服务器扩展做的这么简单,属完全创新。

游戏服务器框架在社区范围里乏善可陈, SmartfoxServer 算是一个不错的了,但它是商用的,而且它是基于 jvm 的单进程架构,可伸缩也打了折扣。

Bigworld 则是很强大的商用 3d 游戏引擎(涵盖服务端、客户端)。Bigworld 更适合大规模的游戏开发,但时间,复杂度,成本等比较高。pomelo 的优势是开源,简单,快速开发,可以让使用者很快地开发出并发布他们自己的游戏,并能很灵活地规划调整服务器资源,支撑的游戏类型和规模也不错。

在高实时 web 应用领域,有 derby,meteor, SocketStream, 但跟 pomelo 的关注点很不一样,它们基本都是单进程架构,核心关注点是 web 应用的实时数据同步。

InfoQ:能否讲讲关于 pomelo 的理念及实现?

pomelo 的第一个理念是让游戏(高实时 web 应用)服务器的开发变得非常简单, 而不是解决某类算法或系统上的难题。这个设计理念跟 rails 是很类似的。

第二个理念是重视性能和可伸缩性,用户用 pomelo 开发出来的游戏天生具有很强的伸缩性,扩展也很容易。我们在性能优化上也花了很多功夫,并且会持续进行。

第三个理念是让第三方很容易扩展,框架用了很多插件式的设计, 组件 component、路由规则、甚至管理控制台都可以完全由第三方扩展。

InfoQ:我们注意到 pomelo 已经准备好了项目英文站点,是打算将 pomelo 做全球推广吗?

是的, 我们认为目前的开源产品必须走国际化的路线,目前国外的开源环境也比国内好。况且 node 社区和 github 是非常活跃的社区, 通过与国外开发者的沟通和交互,可以使我们最快地完善我们的开源框架。

另外,我们的设计理念和架构在国际社区里也是领先的,可以去国际开源社区试一试。

InfoQ:最后一个问题,有没有什么意见或者建议给转用 Node 的开发者?

首先, 对于非 node 的开发者,建议无论如何看一看 node 的开发模型,了解一下,也许哪天你就会用到;异步编程也没那么可怕,很多关于异步代码太丑, 甚至异步反人性的言论, 只是因为他们还没有深入去用,用 node 完全可以写出很漂亮的代码。

对于 node 的开发者,

一、多看资料,多实践 。对于入门学习的,可以看 node.js in action 等书籍,如果过了入门阶段,建议去 mailing list 或 youtube 上看视频可以学到更深入的内容。

二、多来社区交流, node 社区, cnode 社区,node party,jsconf 中国 (今年叫沪 js,明年可能叫京 js),github,沟通很重要。

谢骋超之后会对 pomelo 框架的技术细节做详尽解析。请关注 InfoQ 的后续技术文章。

另外, QCon 北京 2013 亦与时俱进,新增了 Node 专场。Node 现在到底只吸引了眼球,还是在企业中已经成熟落地广为应用?敬请关注此次 QCon,聆听诸多一线专家在各个场景应用 Node 的经验。11 月 25 日前报名,可享 6 折优惠。

2012-11-20 01:3018450
用户头像

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

关注

评论

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

数据库故障容错之系统时钟故障

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

【函数式编程实战】(十) 优雅的处理代码中的时间类

小明Java问道之路

Lambda java8 Stream API 7月月更 签约计划第三季

数据中台建设(三):数据中台架构介绍

Lansonli

数据中台 7月月更

SRv6初登场

穿过生命散发芬芳

7月月更 SRv6

MySQL进阶--存储过程以及自定义函数

Java学术趴

7月月更

Prometheus 运维工具 Promtool (四)TSDB 功能

耳东@Erdong

Prometheus 7月月更 签约计划第三季 Promtool

Redis设计规范

知识浅谈

redis' redis 精讲

汽车智能应用生态的下一个趋势:车载小程序

Geek_99967b

车联网 物联网,

网络安全漏洞分析与漏洞复现

网络安全学海

网络安全 安全 渗透测试 WEB安全 漏洞挖掘

一文读懂Plato Farm的ePLATO,以及其高溢价缘由

股市老人

算法题每日一练---第12天:算式900

知心宝贝

程序员 算法 前端 后端 7月月更

《我的Vivado实战—单周期CPU指令分析》

攻城狮杰森

cpu 计算机组成原理 7月月更 vivado 计算机科学与技术

Qt | 信号和槽的一些总结

YOLO.

qt 7月月更

融云 IM & RTC 能力上新盘点

融云 RongCloud

语音聊天app——如何规范开发流程?

开源直播系统源码

软件开发 直播系统源码 语音聊天系统

Starfish Os X MetaBell战略合作,元宇宙商业生态更进一步

股市老人

计算机视觉中Python如何实现图像操作与处理

迷彩

Python 计算机视觉 图像处理 Pillow 7月月更

浏览器视频帧操作方法 requestVideoFrameCallback() 简介

devpoint

html5 视频处理 requestAnimationFrame 7月月更

Starfish Os打造的元宇宙生态,跟MetaBell的合作只是开始

鳄鱼视界

鲜衣怒马散尽千金,Vue3.0+Tornado6前后端分离集成Web3.0之Metamask钱包区块链虚拟货币三方支付功能

刘悦的技术博客

Python 区块链 Vue 加密货币 虚拟货币

C# 之 方法参数传递机制

陈言必行

7月月更

C# 窗体应用使用对象绑定 DataGridView 数据绑定

IC00

C# 7月月更

小程序助力智能家居生态平台

Geek_99967b

物联网,

机器学习如何做到疫情可视化——疫情数据分析与预测实战

是Dream呀

人工智能 机器学习 爬虫 数据可视化 疫情分析

Linux环境快速搭建elasticsearch6.5.4集群和Head插件

程序员欣宸

Java elasticsearch 7月月更

Bootstrap警告和轮播插件详解【前端Bootstrap框架】

恒山其若陋兮

7月月更

SpringBoot 整合 Swagger 自动生成在线API文档

宁在春

springboot swagger 7月月更

算法题每日一练---第11天:第39级台阶

知心宝贝

程序员 算法 前端 后端 7月月更

SpringBoot整合Minio 项目中使用自己文件存储服务器

宁在春

springboot Minio 7月月更

网易NodeJS开源游戏框架pomelo访谈_Web框架_彭超_InfoQ精选文章