从零开始手把手带你全面认识 网易的游戏服务端框架 Pomelo

赞赏 2017-09-06

两个月前,我们曾在官微推送过 如何在Cocos Creatorv1.5中集成Pomelo教程。之后,许多小伙伴通过后台不断询问关于Pomelo是否能有更基础的介绍。 感谢简书ID:曾彬思,他从Cocos开发者的角度为我们分享了关于Pomelo的独特见解。Pomelo基于socket.io开发,支持socket.io支持的多种语言客户端,并且具有快速、易上手的游戏开发模型和API,小伙伴们吃下这波安利。


初识Polemo


简介

Pomelo是网易的游戏服务端框架,虽说是游戏服务端框架,但是它的很多核心跟通俗的应用服务端是通用的。pomelo是基于Node.JS封装的,具有天生的多进程分布式特征。


安装Node.JS

在安装Pomelo之前需要全局安装Node.JS,Node.JS的下载链接是:

  • https://nodejs.org/en/download/

  • http://nodejs.cn/download/

根据系统找到对应的版本进行下载安装即可(具体的可以自己上网搜索下Node.JS相关的博客或者教程里面都有)。


安装Pomelo

安装好node之后,可以使用 npm (node包管理工具)全局安装 pomelo:

如果安装node.JS后配置了cnpm,那么可以使用 cnpm 来安装:

如果安装过程中没有报错误,说明安装成功。


新建项目

新建一个空文件夹HelloWorld,cd到文件夹下,执行 init 命令:



执行init命令的时候,控制台光标会停在这个位置,需要选择网络连接方式:

  • 1:websocket

  • 2:socket.io

  • 3:wss

  • 4:socket.io(wss)

  • 5:udp

  • 6:mqtt

可以根据实际项目情况选择需要的网络连接方式,现在我们可以选择了 1。

其实,对于 websocket 还是 socket.io,pomelo 都提供了相同的API进行操作。


安装依赖

pomelo是基于node.js的工程,所以不可避免的会需要用到一些node.js的包,我们需要在项目下安装node.js的依赖包。

mac OSX下,我们可以在终端执行:

windows下,我们需要在终端运行 npm-install.bat 批处理文件:


如果配置了cnpm,那么我们可以打开对应的npm-install脚本,修改里面的npm命令为对应的cnpm,然后保存关闭后再执行。

安装成功后,在项目的game-server和web-server下都会多出一个node_modules文件夹,里面就是刚刚安装的依赖包。


项目目录结构


在新建项目的目录下有三个文件夹,分别是:game-server、web-server和shared。


shared

由于JS的各方面条件,现在很多的游戏客户端也采用JS进行开发,而pomelo也是基于JS的,所以有些算法、或者功能模块是可以被服务端和客户端所共用的。这部分代码就可以放置在shared目录下,这样充分体现了pomelo所提倡代码高重用性。


web-server

web-server是一个网页客户端目录,里面存放的是web客户端的代码,以app.js为入口文件。这里我们不做过多的阐述。


game-server

这里面就是使用pomelo框架开发的游戏服务端的代码。在game-server下有app、config和logs三个文件夹,还有刚刚安装的node_modules。项目同样以app.js为入口文件。

  • app:项目所有功能性的代码都放在这目录下。

  • config:项目的所有配置,包括pomelo和游戏服务端的逻辑相关的配置。

  • logs:服务端运行生成的日志。

【在config里面,多了一个adminServer.json文件,如果我们有新增服务端类型(比如:gate服务器),需要在这里配置token信息,否则会一直显示注册服务器到master失败。token可以自定义,或者生成一个足够长的字符串即可,甚至可以多个服务端公用一个token,主要取决于对项目安全性的要求。】


运行项目

运行game-server的命令如下:

运行web-server的命令如下:


如果运行过程中提示端口冲突,我们修改config下的server.json文件中的端口和web-server/public/index.html中对应的端口即可。


启动客户端

由于HelloWorld是一个web客户端,所以当启动web-server后,在浏览器访问对应的页面即可。


Pomelo定时任务


制作定时任务可以使用cron来实现,具体的可以网上搜索“cron定时任务”。这里介绍在Pomelo中如何实现定时任务。

编写任务

在项目game-server/app/servers下面新建一个“servertask”文件夹(文件夹名称任意),在servertask下新建一个“cron”文件夹,在cron文件夹下新建一个名为“servertaskCron.js”的代码文件,servertaskCron代码如下:



添加定时任务服务器配置

在game-server/config/servers.json中添加servertask的服务器配置:


添加服务器token

在新版本的Pomelo中,config目录下新增了一个adminServer.json配置,在里面添加一个servertask的配置,否则启动servertask的时候会提示注册服务器到master失败。


token字段的值可以任意,用一个足够长的字符串或者所有服务器公用一个token也行,主要取决于你的服务器安全级别。


添加cron配置

在game-server/config目录下新建一个“crons.json”文件,配置如下:


id是定时任务在具体服务器的唯一标识,且不能在同一服务器中重复。
time是定时任务执行的具体时间,时间的定义跟linux的定时任务类似,一共包括7个字段,每个字段的具体定义如下:

"* * * * * * [command]"

action是具体执行任务方法,servertaskCron.clrearEveryDayTaskDatas则代表执行game-server/app/servers/servertask/cron/servertaskCron.js中的clearEveryDayTaskDatas方法。


定时任务时间定义格式

"* * * * * * [command]"
"秒 分 时 日 月 星期 [运行命令,可省略]"

秒的取值范围[0, 59]。
分的取值范围[0, 59]。
时的取值范围[0, 23]。
日的取值范围[1, 31]。
月的取值范围[0, 11]。
星期的取值范围[0, 6],0表示星期天。

*:表示任何时刻
,:表示分割
-:表示一个段,如第二端里: 1-5,就表示1到5点
/n: 表示每个n的单位执行一次,如第二段里,*/1, 就表示每隔1个小时执行一次命令。也可以写成1-23/1.

【在Pomelo里面用/1报错,改成0/1就可以了】*


运行测试


使用 pomelo start 启动服务器


不少人问Creator 是否能集成 pomelo,根据个人理解:Cocos Creator 实现了websocket的跨平台封装;而 pomelo 也有基于websocket的客户端实例。因此,Cocos Creator 集成pomelo应该不会有什么大问题。感兴趣的朋友可以参考本文以及之前教程:如何在Cocos Creatorv1.5中集成Pomelo,有任何问题欢迎留言共同探讨。


登陆后阅读全文
阅读 2367 赞赏 0 有用 10 没用 0 收藏 0 分享

   



0 条留言

相关文章

教程|如何在Cocos Creator v1.5中集成 Pomelo?

教程:Cocos Creator如何给资源打上MD5版本号?

Node也许不是构建大型服务的最佳选择——Node之父Ryan Dahl访谈录

基于 Node.js 平台的下一代 web 开发框架 Koa 入门教程

看 Nantas手把手为你详解 v1.5资源导入导出工作流程

Cocos Creator v1.6使用体验Q&A

教程|如何在Cocos Creator 中完美使用 protobuf.js

Cocos Creator可以用来开发大型MMO吗?

Cocos Creator 开源游戏集合贴 (源码 视频 在线统统有)

【Cocos Creator与C++知识分享】AnySDK打包微信登录、微信分享

有料推荐

这世界欠我一个这样的老公!

高校学生模仿“世界名画”摆拍,可以说是戏精本精了

iPhone X 跌破发行价,苏宁200亿入股恒大 | 财经日日评

果然是高手!这次在日本,特朗普竹杠敲得不是一般狠

资深黄牛现身说法:iPhone X价格秒变不停,就像炒股一样

长一样的双胞胎也能识别?蚂蚁金服发布「眼纹识别」技术

苏联是怎么被阿富汗拖垮的?

美团或入局「分时租赁」共享汽车,王兴要大笔投入「泛出行」领域了? | 36氪独家

你或许被“一盘番茄炒蛋”刷屏了,但有人辛酸,有人质疑

iPhone X发售前夜,黄牛与苹果公司的不安

他的文章

低内存占用、无广告、功能强大又唯美的本地播放器 - Potplayer

从零开始手把手带你全面认识 网易的游戏服务端框架 Pomelo

推荐一款上线 Cocos商店的付费插件——可视化状态机

手把手教你如何优化cocos2d-x手游内存

「新手向」用Cocos Creator也可以轻松做阿拉斗牛

Cocos Creator v1.6支持Camera剔除功能!

Cocos Creator v1.6使用体验Q&A

Cocos Creator可以用来开发大型MMO吗?

教程:Cocos Creator如何给资源打上MD5版本号?

「教程」如何在Cocos Creator中优化首页打开速度

手机扫一扫
分享文章