cocos creator 1.8+socket.io (顺带express)的简单实现

之前用ccc编了一个小游戏,然后继续往后端学习,看了一些资料,决定采用socket.io尝试一下。目前网上帖子貌似creator的版本都是1.5或者之前的。自己在学习的过程中,按照帖子一步一步做,也碰到了一些问题。于是记录一下解决的过程,免得忘了。
参考的大神linhaiwei123教程帖子:http://forum.cocos.com/t/cocoscreator-socketio-1-0/35538 ,按照大神的步骤一步一步来,因为版本跟大神用的不一样,所以里面的内容会有差异。
第一步:安装node.js和需要的包。
这里安装的版本是node.js v8.11.1,看官网写着大部分开发者都用这版,所以也没下载最新版的。socket.io 装的是socket.io v2.1。express 是v4.16.3,基本都是很新的版本。
第二步:按照大神的教程一步一步做,把该配置的路径配置好。
第三步:写个server.js的脚本,因为是测试,就随便在桌面上建个文件夹扔里了。
第一个server.js只为测试socket.io,所以没用express框架,后来测试好使了,又在server.js脚本上引用了express。大家可以根据是否安装了express选用。
图片1:没引用express

图片2:引用了express的server.js

然后在放server.js的文件夹的地址栏输入cmd,进入命令行界面,输入node server,会弹出console.log的内容 listen on 3000。

第四步:下载最新版的socket.io.js,github里有,或者也可以在官网下载。github和官网时不时的打不开,不知道什么原因,看机缘自己选择吧。
github下载后在dist目录下。


这个是官网的,就自己费点劲,复制一下。

第五步:按照cocos creator官方的提示,点开socket.io.js,加点hack的手段。加完这句代码后,把socket.io.js扔到creator项目script的目录下,然后引入为插件。

第六步:在creator的项目里,写个连接服务端的脚本,反正测试,就直接写在helloworld.js里了。写完代码,把js挂在canvas下,然后label扔到属性管理器中归属他的位置,这里大神教程写的很细,我就不重复了。

第七步:运行项目,就出结果了。

遇到的问题:
可能我比较手贱,再加上菜鸟,几乎把论坛里和网上能碰到的问题都碰上了。这里把我还记得的碰到的问题写一下。
问题1:MSBUILD : error MSB3428: Could not load the Visual C++ component “VCBuild.exe”.
忘了怎么引起的了。好像是装pomelo框架(这个框架跟这个帖子没关,不过弄这个pomelo的时候也基本把网上的问题都碰到了,这个有空另开贴说吧,都是泪)的时候,记得要装vs2010,后来发现这个也太特么大了,上学的时候用过2005,没觉得很占地方,2010居然要10g多,总之各种删,好像删错东西了,在试socket.io的时候导致了这个问题。结果发现网上还是有不少人碰到这个问题。https://github.com/nodejs/node-gyp/issues/307#issuecomment-240556824,这个是一个很长的楼,我居然耐心的一直看下去了,可能是看大家一会装2010,一会装2013,一会2015的,各种装各种试都不好使,然后坐那骂微软比较有意思,而且后面还真写了解决的方法。红框中的兄弟,说话还是很有哲理的,引人思考。https://github.com/nodejs/node-gyp#installation,这个github链接有比较全的解决方法,我比较懒,就按照windows系统的option 1 的方法执行了,成功解决问题。


问题二:Uncaught TypeError: Cannot read property ‘WebSocket’ of undefined。原来教程里的客户端脚本,有这一段判断(红框里的),我怎么改都不行,后来干脆给注释了,就没这个错误了,直接通过。有大神能给讲讲怎么改能通过,不胜感激,要不然,总是个问题埋在这,说不定在什么平台就出错了。

问题三:运行客户端后,服务器的命令行界面一直在刷“有人来了”,express那个版本的server.js的话就是一直刷"a user connected",时间长了,忘了怎么解决的了,好像是socket.io.js没引用好,或者是没点上引入为插件。不过如果按我之前的步骤做的话,应该是碰不到这个问题的。

3赞

不错不错 很实用

虽然没法解决你第二个问题,不过你写的很棒,解决了我的问题。赞!!!

真的是奇怪呢,我按照你的方法,问题二,把require注释掉,仍然还会报错:

Failed to load resource: net::ERR_BLOCKED_BY_CLIENT

Uncaught TypeError: Cannot read property ‘WebSocket’ of undefined

不知道有哪位大神可以帮忙指点一下,怎么排除

————补充:
刚刚发现,按照你的方法把 require注释掉后,需要重新把cocos 完全关闭后,重新打开就可以正常了!!
应该是cocos creator的问题

1赞

大佬注释那个require 我也遇到这个问题啊

引入socket.io的时候客户端不写任何代码
报错:

Simulator: ERROR: ReferenceError: Can't find variable: navigator, location: __node_modules/engine.io-parser/lib/browser.js:20:26

socket.io 是用的cdn粘贴复制的,源码里面也加了

 if (!cc.sys.isNative) {
     // SocketIO 原始代码
 }

有没有遇到这个问题的

模拟器里面是不是用不了socket.io啊?

mark

楼主辛苦了。

遇到了问题三,感觉全网找遍了,终于遇到一样的问题了

cocos中可以使用GoEasy提供的websocket推送服务,不用自己搭websocket服务器,使用typescript方式引入即可,支持wss、心跳、断线重连等机制,我们公司的小游戏项目就是用GoEasy做的,稳定很不错的。https://www.goeasy.io/

我使用ccc3.3.2也遇到了相似问题。socket.io 新版本还要注意跨域问题,已解决。谢谢