creator websocket 浏览器端正常,模拟器异常

使用的 creator1.9.3 在浏览器里可以正常玩游戏,在模拟器里websocket握手失败
服务器是C++服务器,



第一张图是浏览器里抓的消息头 第二张是在模拟器里抓的消息头

这是客户端调用的方式

这是模拟器请求握手 服务器返回的内容

这是服务器发送握手相关代码,
在调用send()函数之后 客户端直接收到onError,把onclose的event打印出来了,Simulator: D/jswrapper (125): JS: [Debug]LS >>>>> websocket closed.{“type”:“close”,“target”:{“url”:“ws://localhost:6680”,“URL”:“ws://localhost:6680”,“protocol”:"","__jsb_ref_id":101}}

没有自改引擎,没有扩展,我是在windows下开发

不同于之前论坛的帖子,我们服务器是可以收到消息的,并没有因为协议的原因给拦截了。最后服务器端显示握手成功了,但是客户端收到握手消息之后跳OnError和OnClose

失败发生在 Windows 模拟器上

打包出android包 在安卓模拟器上 试验也握手失败

@crazy_black 使用浏览器以外的其他的 websocket 客户端可以正常建立连接吗? 比如 https://www.npmjs.com/package/ws#sending-and-receiving-text-data

找了个websocket测试软件 实验了下 可以连接上

从现在的现象上来看 感觉是creator客户端的问题

找了一个其他的websocket软件 是可以握手成功的

方便留个联系方式么 方便解决
解决了之后我把解决方案 贴回论坛就好

@crazy_black :pray: ,如果确认是 引擎的实现 有问题,可以试试更新第三方库。从 https://github.com/cocos-creator/cocos2d-x-lite-external/archive/v23-4.zip 里面的 提取websockets 相关的文件。

我们服务器是go写的,模拟器,windows,android,ios,浏览器都能连上没问题。websockets 协议有很多Draft版本,有可能测试网站刚好跟你服务器对上了,模拟器却对不上。所以还是不能排除是不是服务器的问题

更正一下,ws的模拟器,windows,android,ios,浏览器都测试通过
wss的android,ios,浏览器测试通过,模拟器,windows没需求就没弄

还是有可能的,服务器和客户端版本不匹配 导致的

看了下这个代码 最后提交是2年前 ,然而我现在用的creator是一年以前 18年9月份发布的
我是需要降回去嘛?

我要想追踪下 客户端onError的调用栈,看看是什么原因导致的onError触发 有办法看么

@PatriceJiang
麻烦看下问题,麻烦了

现在有办法知道 onError函数触发的原因么 有错误代码之类的调试信息么

你可以看下 lws_set_log_level 设置,输出更多调试信息, 同时在 WebSocketImpl::onSocketCallback 中开启第一行的LOG。 基本上回调都是通过libwebsockets触发的,如果要调试就需要本地编译一个 debug 版本。

如果需要排除 服务器协议实现 的问题, 可以使用这个 https://github.com/crossbario/autobahn-testsuite 进行测试。
根据 libwebsockets 官方的说法,lws 是可以通过 autobahn 测试的. @crazy_black

https://libwebsockets.org/lws-api-doc-master/html/md_README.test-apps.html

见了鬼了
找了三个工具,分别连接测试客户端和服务器 都能正常握手,但是让客户端去连接服务器,服务器下发握手信息,客户端直接退出了,回调onError
明天研究下 怎么编译个debug版本 看下输出 抓下日志