egret-labs/egret-ios-support

ios wss connect error

Daley opened this issue · 15 comments

Daley commented
     this.socket = new egret_native.WebSocket("wss://zc.wokac.com:3080");

// this.socket = new egret_native.WebSocket("ws://192.168.0.155:3080");
var skt = this.socket;
skt['onOpen'] = function (e) {
console.log("daley 连接1" + e);
};
skt['onMessage'] = function (e) {
};
skt['onError'] = function (e) {
console.log("daley 连接不上1" + e);
};
skt['onClose'] = function (e) {
console.log("daley 关闭1" + e);
};
console.log("daley hello");

Daley commented

我用的是最新的ios-support
总是显示
daley 连接不上1
daley 关闭1

@Daley 这个地址外网能访问吗?我们周一测试一下这个地址,看看问题出在哪。

Daley commented

这个在andorid上测试过了

@Daley 我们测试了iOS support的webSocket。

  1. 我们测试WebSocket官方提供的测试服务器(wss://echo.websocket.org:443)是没有问题的。
  2. 请检查一下服务端是不是把一些脏数据粘到了http上,导致http的Sec-WebSocket-Key字段的值解析错了。
Daley commented

我测试了你们的服务器。确实是好的。

我们的服务器,在安卓底下测试可以,所以提到这了;底层也不太懂。
我们的是基于nodejs pomelo的服务器。nginx作的映射,有什么要注意的不。

@Daley 目前我们已知的情况是服务端使用内存池的话,可能会出现脏数据粘到其他http请求上的情况,您可以在服务端打印一下相关的log,看看是不是哪个key-value的值不对。

Daley commented

多谢啊

Daley commented

我这反复测试了,希望你们能帮看看,因为我不知道你们底层是用了第三方的、还是自己解析的。我也无从排错。
wss://zc.wokac.com:3080 这个是用nginx代理
wss://games.brother66.com:3080 这个直接是用nodejs 的tsl做的
他们都能在android-support底下、谷歌浏览器正常连接,看到的Sec-WebSocket-Key都正常
就我在ios-support底下连接不了

在谷歌浏览器我是这么测试的
1 在开发者工具运行new WebSocket(url)
2 查看network 里看Request Header

@Daley 我们用的是libWebSocket库(https://github.com/warmcat/libwebsockets ),我直接用它创建了一个工程,您提供的两个地址都不能连接,客户端这边我们不能进行兼容。
建议您在服务端排查一下,我们已知不能连接的原因有两个:1、有脏数据粘到了请求上。2、对某些头部信息进行了检查,但是iOS中不能提供。

Daley commented

@lijianegret
我测试了我能找到的几个wss链接。除了你们提供的,其余都是失败的
失败的
wss://zc.wokac.com:3080(nginx配置)
wss://games.brother66.com:3080(nodejs配置)
wss://tgdy.holytree.com.cn:10110(论坛找的)
wss://message.bangbangce.com(别的公司在用的)
成功的
wss://echo.websocket.org:443
ws://192.168.0.155:3080

苹果上我们用Starscream 测试过 wss://zc.wokac.com:3080 是成功
谷歌浏览器认我们的连接
安卓运行时也认
别的库在苹果底下也认
表示很无奈啊。求多关注。

@Daley 上面提供的测试地址是WebSocket官方测试地址,我们开发时会保证这个地址测试通过。我们现在不清楚iOS support上WebSocket不能连接到您的服务器的原因,方便的话请发给我一份服务器端的demo,我们查一下问题在哪。我的邮箱: lijian@egret.com

Daley commented

我是可以发的,只是略麻烦呀。你得装nodejs环境、还要配置域名解析之类的。
我的猜想是,只能连上官方的测试地址,所以你可以找找,看你们公司、朋友有没有测试环境。
如果我猜对了,这个库应该是没问题的,应该只是一两个参数的问题。
如果你找的别的连接能连上,那就另讨论了

Daley commented

加qq276969183,反馈会及时点

@Daley 我们这边有nodejs环境,您可以直接把demo发到我的邮箱,我们会排期处理。

@Daley 我们添加了兼容处理,您之前提到的连接失败的地址(除了第一个在web上也连接不上)都已经能成功连接,我提交到了develope分支(https://github.com/egret-labs/egret-ios-support/tree/develope)。这个issues先关闭了。