现象:客户端建立连接后服务器能收到连接,但是有时候收不到握手协议包。在想用的网络下web正常,ios正常,android某些手机不正常(服务器收不到握手协议,但是有时候又能收到,此手机在其他网络下又是正常的)。
客户端代码:
conn(url) {
if (BaseDefine.GAME_PLATFORM === BaseDefine.WEB_WXGAME_PLATFORM) {
var urlList = url.split(’:’);
url = ‘wss:’ + urlList[1];
}
if (!this.client || this.client.readyState === WebSocket.CLOSED) {
var self = this;
var ws = new WebSocket(url);
self.client = ws;
ws.binaryType = "arraybuffer";
ws.onopen = function (event) {
if (self.useLog) {
Global.print("====ws连接成功! name = " + self._name);
}
self.m_SocketSink.onopen()
};
ws.onmessage = function (event) {
// Global.print("====收到:" + event.data);
if (event.data instanceof ArrayBuffer) {
var arr = new DataView(event.data);
// Global.print("====收到1:" + arr.getUint16(4, true) + "," + arr.getUint16(6, true) + "数据:ArrayBuffer" + event.data.byteLength);
self.m_SocketSink.onmessage(event)
// Global.print("====收到:" + arr.getUint16(4, true) + "," + arr.getUint16(6, true) );
}
else {
var data = JSON.parse(event.data);
if (self.useLog) {
// Global.print("====收到:" + data.m + "," + data.s + " 数据:" + event.data);
}
}
};
ws.onclose = function (event) {
if (self.useLog) {
Global.print("====ws断开连接! name = " + self._name);
}
self.m_SocketSink.onclose(event);
//重新刷新IP
DDOSDefense.Req_GetTransIP();
};
ws.onerror = function (event) {
if (self.useLog) {
Global.print("====ws连接错误! name = " + self._name);
}
self.m_SocketSink.onerror(event)
//重新刷新IP
DDOSDefense.Req_GetTransIP();
};
} else {
if (this.client.readyState !== WebSocket.OPEN && this.client.readyState !== WebSocket.CONNECTING) {
var target = this;
window.setTimeout(function () { target.conn(url); }, 1000);
}
}
}