我的项目打算前端用cocos creator,但是服务器是用java语言编写的,协议是protocol buffer,请问使用cocos creator如何与后端程序进行socket通信呢?因为刚接触cocos2d,还不是很了解,望大神解惑,最好是能提供一个示例,感激不尽!
据我目前的了解,cocos creator的目标是实现纯JS脚本化开发,但脚本语言和编程语言还是有很大的不同的,而且有局限性。比如网络这块,JS如何实现与后端服务器进行TCP/IP通信?如果是使用websocket的方式,那么是否只支持网页游戏?打包到ios或者安卓native下的时候,还会起作用吗?官方有没有考虑在socket协议方面做一些支持呢?如果仅仅是目前这种状态的话,大概也只能做单机游戏和网页小游戏了(棋牌),稍微大一点的网络手游,都是用TCP/IP协议吧。而且这种游戏才是能赚钱的,如果用JS仅仅能开发单机游戏和网页小游戏的话,那么我并不看好cocos creator的前景。
cocos creator依然适用cocos js底层,如果要实现socket tcp/ip需要修改C++集成相关通讯库, 但是修改C++后将会影响发布到cocos play之类的平台,使用websocket同样可以发布到native平台(ios也属于native),目前JS支持websocket和socketio(包括websocket)如果使用socket,将不支持web平台,cocos JS存在的目的就是为了跨各种平台的,所以关服目前应该不会考虑集成socket.
websocket的底层是socket,所以同样可以用来开发复制的网游,java有一些开源库支持websocket,如果是自己实现websocket制需要将通讯中得到的buffer进行一次协议解析即可
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
±±±±±------±±------------±------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/64) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
±±±±±------±±------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - ±------------------------------+
| |Masking-key, if MASK set to 1 |
±------------------------------±------------------------------+
| Masking-key (continued) | Payload Data |
±------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued … :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued … |
±--------------------------------------------------------------+
在 https://datatracker.ietf.org/doc/rfc6455/?include_text=1 有详细的定义.
我是用的C#写服务器,没用第三方库,由于微软的websocket包不能满足网游服务器的需求,所以我是根据这篇文章在socket基础上实现的websocket.我以前也用过java,相信你也可以实现的.
cocos creator发布时我就在使用了,虽然还有些不足,但是对cocos js开发者来说是一个惊喜,前景大好,静候正式版的发布.

















非常感谢你的回答,我服务器是用的netty,的确可以很容易的支持websocket,如果使用websocket,写的JS代码在发布到原生程序的时候ccc会自动翻译成java或者OC代码吗?不需要我去做另外的操作吧?
JS代码不会被翻译,你可以将其编译为jsc达到脚本加密的目的
我一直从事的是服务器端的开发,最近想做一款自己的游戏,所以才开始接触前端的,听说了ccc是用纯JS脚本开发,进而才开始研究。所以我其实是一个前端小白,其实我想问的问题是,如果用JS代码写的websocket部分,那么打包到原生的时候,是否会起作用?如果方便的话,麻烦告诉我一下原理吧,感激不尽。还有你说的jsc是什么意思呢 ?
websocket在native下有效
在构建发布的时候有个"调试模式",去掉勾选,creator会将JS文件编译为字节码(jsc)达到脚本加密的目的(防君子而已)
你也可以手动编译,编译工具在cocos包的cocos2d-console\tools下,如何操作可以参照官方文档或百度.
需要注意的是,web不支持jsc
=======
对我公司来说,我也只是个单纯的服务器主程而已…
p.s 触控在招服务器端,你可以进去…学前端

感谢感谢!看来只能用websocket了、、
hi~ 我的情况和你非常相似,一个技术栈主要在后端的前端小白在做款游戏。我的疑问也在于ccc把js实现的client打包到android和ios平台上,基于websocket的client代码还能work么,web上是各大浏览器厂商实现了对websocket协议的支持,那打包到android和ios平台上后谁实现了对websocket协议的支持。不知道您的实现这个过程中间有没有踩什么坑~ 望赐教
netty的websocket与ccc通讯非常不稳定,我们现在项目就是这个框架的,坑太多,不知道有没有好的解决方法
都有什么坑呢?同样的技术架构。能说说么
具体坑点 能否列举一二?
我会告诉你们 我们用 jetty websocket框架开发
不是netty吗