cocos creator win32和native连接websocket的一个坑

  • Creator 版本:1.9 ~ 2.1

  • 目标平台:

websocket在web平台可以正常连接,接入android或者用模拟器运行,总是莫名其妙的被服务器断开websocket的连接,本来以为是环境问题,把creator从1.9.2升级到2.1,也升级了AndroidStudio到3.2。按照使用手册推荐的方式,重新安装了所有的NDK,SDK,JAVA等等。结果还是一样被服务器断开连接。于是重新建了一个新的scene,里面直接调用Demo里面连接websocket的例子:

 ws = new WebSocket("ws://echo.websocket.org");
 ws.onopen = function (event) {
     console.log("Send Text WS was opened.");
 };
 ws.onmessage = function (event) {
     console.log("response text msg: " + event.data);
 };
 ws.onerror = function (event) {
     console.log("Send Text fired an error");
 };
 ws.onclose = function (event) {
     console.log("WebSocket instance closed.");
 };

 setTimeout(function () {
     if (ws.readyState === WebSocket.OPEN) {
         ws.send("Hello WebSocket, I'm a text message.");
     }
     else {
         console.log("WebSocket instance wasn't ready...");
     }
 }, 3);

发现可以成功连接。于是一点一点测试哪里不一样。
最终发现是url后面带参数的时候,需要加一个斜杠。不然就会被Android认为是在发送http请求……

错误:
ws://www.ttt.com:4000?id=1&name=b

正确:
ws://www.ttt.com:4000/?d=1&name=b

这种算是引擎的坑吧,耗费了两天时间,环境装了两遍,试了2.0.5和2.1.

2赞