在使用reactJs开发一个项目的时候在适配Android的时候遇到这个问题。
首先,前提是这个webscoket地址是可以使用的,并且在电脑浏览器上是可以正常的
其次,Android7.0以上的原生浏览器上是正常的(国内其他机型自带浏览器不包括,因为基本都是自己的内核)
通过错误可以知道,服务器是连上了,但是发生了错误,又部分机型可能提示的是 握手失败
错误查找是通过抓包对比请求头发现的。
Android原生浏览器上多了一个 Sec-WebSocket-Protocol: undefined
而浏览器的请求头里没有这一行
解决方式:
我使用的是 react的Sockette库,所以是在配置里加了下边红色那行,也就是协议方式
protocols: "chat",
timeout: 10e3,
maxAttempts: 10,
发送请求的时候头部里显示
Sec-WebSocket-Protocol: chat
这时候显示请求成功。
如果使用的是 WebSocket,
那么代码方式是
var ws = new WebSocket("ws://xxxxx/ws/","chat")
这里只是我的错误方式和解决方案,对socket没有过深入研究,只停留在使用阶段,可能还有别的错误方式,暂时没时间继续跟进,之前以为是兼容性问题,耽误了很久的项目工期。
最后兼容到Android4.4+原生浏览器,因为Android4.4以下的webview并不支持websocket
参考:微信小程序WebSocket报错:Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received