cocos creator + pomelo 的简单实现

自从决定用node.js+socket.io+express来实现服务器端后,学习了一下,觉得全部自己写服务器端,简单测试或是小游戏还行,以后要是稍稍复杂一些,对我这种菜鸟就比较头疼。最好能有个类似前端的cocos creator这样的工具比较好,不用从底层写起。

全网搜查,貌似网易很久以前出了一个pomelo框架比较合心意,集成了socket.io和express,https://github.com/NetEase/pomelo/wiki/Home-in-Chinese 有很详细的讲解,总之介绍里写的很强大,微信咨询了同在北京的几个游戏公司的程序,都说听过pomelo,做做轻量级的游戏还是没问题的,问题肯定很多,但都可以解决。

奈何高手无法想象菜鸟菜的下限,当把老旧的pomelo和新生的cocos creator 1.8.2集成在一起,还是碰到不少问题。于是又开始全网挖贴,终于挖到了eddy_wiki https://www.jianshu.com/p/c64f7607adee ,一切的一切都在eddy的基础下变得异常简单。之后又在eddy帖子下看了夜雨归人( https://www.jianshu.com/p/42ec9893389a )的一些改进,一切OK。下面按照官方教程和各路高手的指点,一步一步开始:

第一步:安装pomelo及必要的相关软件,上面链接的官方教程足够详细,大家按着做就行。另外注意就是要安装python和vs2010。vs2010要吞噬10g的硬盘,对于c盘只剩3g,D盘只剩9g的我,无异于一个大雷。总之就是没安装vs2010。但是vc++的环境还是要上, https://github.com/nodejs/node-gyp#installation ,选择windows-> option 1 的方法,直接npm install --global --production windows-build-tools,把python和 vc++一起搞定了,大约不到2g的硬盘空间。如果之前没装过python,别忘了设置环境变量,设置的方法在安装pomelo教程的结尾处。

第二步:创建pomelo项目,选择connector的时候,选择2)socket.io。这里建议下载pomelo官方的例子chatofpomelo-websocket,因为eddy的教程也是基于这个例子修改的,用起来方便。下载这个例子还是直接看教程就好。

第三步:运行例子。在game server 文件夹下cmd,pomelo start有几率(比如我)碰到了以下问题
[2017-11-23 11:54:42.226] [ERROR] console - Option path is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option close timeout is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option heartbeats is not valid. Please refer to the README.
[2017-11-23 11:54:42.226] [ERROR] console - Option log level is not valid. Please refer to the README.

解决方法详见 http://www.cnblogs.com/zhongweiv/p/nodejs_pomelo.html ,原贴作者指出是新版的socket.io用法不正确引发。用 https://github.com/NetEase/pomelo/blob/master/lib/connectors/sioconnector.js 来替换下载的…\chatofpomelo-websocket\game-server\node_modules\pomelo\lib\connectors\sioconnector.js 即可解决。

在web server文件夹下node app,有几率碰到warning,关于express.createServer(),进入web server的app.js,把var app = express.createServer(); 改成var app = express();

聊天室在用户推出后,报错[ERROR] pomelo-rpc - [mqtt-mailbox] rpc connector-server-1 callback timeout 30000, remote server 6 host: 127.0.0.1, port: 6050,参照夜雨归人的解决方法,进入\game-server\app\servers\connector\handler里的entryHandler.js,将其中的onUserLeave函数修改为:

var onUserLeave = function(app, session) {
if(!session || !session.uid) {
return;
}
app.rpc.chat.chatRemote.kick(session, session.uid, app.get(‘serverId’), session.get(‘rid’), function(){
console.log("====== kick callback over! ======");
});
};

问题解决,夜雨归人说chatRemote也要改,看了一下代码,貌似官方已经按照夜雨归人的观点改完了,咱们就不用管了。

为什么说有几率碰到呢,原来我是的确碰到了这些问题, 今天(2018.5.14)又下载一下例子,寻思复现问题截个图,结果都没有出现…估计有人在github 上pull request通过了。难道网易还在维护?总之今天有点懒,就不去查看了。

例子运行成功之后,就可以进入聊天室聊天了。服务端没啥问题,那下面,就要到cocos creator了。

第四步:制作cocos creator使用的pomelo库的脚本。进入…/chatofpomelo-websocket/web-server/public/js/lib/components,继续往下有四个文件夹,每个都有一个js脚本,把这四个都拉到cocos creator的项目里script文件夹下面
1)component-emitter下的index.js拉到creator项目里,改名为emitter.js,在module.exports = Emitter;下面加上一句window.EventEmitter = Emitter;
2)pomelo-client.js 中第五行var Protocol = window.Protocol修改为var Proctocol = require(“protocol”);
3)protobuf.js第37行,将(this.protobuf = {}),修改为{}。
4)protocol.js最后,第350行,将(this.protocol = {}),修改为{}。

第五步:需要一个前端配合一下,为了省事,还是直接用eddy的吧,
git clone https://github.com/eddy2015/ccc-pomelo-chat-client.git ,把第四步做好的pomelo包,也就是那四个js,替换ccc-pomelo-chat-client项目pomelo目录下的四个js,其他的界面之类,直接拿来就好啦。

第六步:运行服务器端,进入game-server文件夹,地址栏输入cmd(如果总是输cmd,觉得恶心,找问题也麻烦,就webstorm吧),然后输入命令pomelo start,运行cocos creator项目ccc-pomelo-chat-client,不出意外就成功了,不会有问题。

印象中还有些小问题,比如websocket找不到啊,或者socket.io的问题,都是用eddy的例子之前自己调试遇到的,后来直接用eddy的例子就没有了。以后复现问题的时候再补充,估计都是socket.io版本和一些写法导致的问题。

4赞

我们自己在微信精品小游戏里的《五子大作战》,就是用 creator + pomelo 实现的。商用化已经验证通过,可以放心用这种方案了。

赞啊,那cocos会把这个小游戏开源么?数据库是用mysql还是mongodb?如果是mysql的话,用的是8.0.11这个新版本么?

你的网页地址打不开呀

  1. 游戏怎么可能开源呢,一个微信精品小游戏得花费多少心血
  2. mongdb 3.2.10。这个是腾讯云tlinux提供的版本,没得选

哈哈哈

太6了

我刚又点了一遍,貌似没啥问题,你说的哪个网页?我再试试

这些我都进不去

没问题的 用pomelo做过卡牌RPG 棋牌 三消RPG 同时在线4000人 MMORPG就可能扛不住了

用pomolo方案唯一不稳定的地方在于:pomolo维护人员只有一二个,维护的极慢。慢到你感觉网易已经放弃了。而且pomolo这东西网易内部几乎不用的。pomolo当初用它做棋牌的时候印象中有几个大坑要趟过去,趟过去之后就能用了。

谢谢指出问题,调整了一下,之前编辑的不太好,现在应该可以了!

感谢分享,我这还弄mysql呢。。。那到时候要是托管到腾讯云,不是还得重弄。。。看来现在得改mongdb 3.2.10吧

除了pomelo,还有其他的更好的框架么?新手,不是很熟悉啊 @傅红雪 @minkowang

js的分布式框架好像能用的只有pomolo。

Mark

客户端和服务端之间是使用的 websocket连接的吗?

我第一家公司的老板,从12年就开始 前段用cocos2d-js , 后端用 nodejs 开发,,现在看看理念是真的超前。 。

websocket 和socket.io 都可以。

老大这游戏太赞了,我一直想搞个改造棋类变种,但没有系统的方案