我正面临着一个问题,这个问题在那之前是不存在的,一切都在发生,因为它应该是昨天。但今天我突然看到socket.io在控制台上显示此错误
failed:Connection closed before receiving a handshake response
有人知道是什么原因吗?
socket.on('initUser',function(udata){
//doing some work
socket.emit('message',{userId:user.id});
});
socket.on('connect',function () {
socket.emit('initUser',{data:udata});
});
socket.on('message', function (data) {
//doing ui task on returned data
});
先谢谢
答案 0 :(得分:3)
似乎这是由最新版本的Apache(> = 2.4)中的一个错误导致的,当使用ProxyPass(反向)代理WebSocket连接到上游服务器时。我在mailing list阅读了有关此事件的更多信息,但我没有找到关于为什么Apache拒绝 - 看似随机连接的进一步解释。
当我尝试通过Apache连接到Tornado WebSocket应用程序时,我在随机时间处理同样的问题,并且Apache错误和访问日志中没有任何关于此的信息。
由于我找不到使后端安全失败的方法,我决定使用JavaScript在前端解决问题。所以我在我的WebSocket对象中添加了一个属性connected
,默认情况下为false
,并在连接打开时设置为true
。然后我在close事件上添加了一个事件处理程序,如果它从未建立,则会重试连接。
var sock;
function connect () {
sock = new WebSocket('ws://myhost');
sock.connected = false;
sock.addEventListener('open', function () {
this.connected = true;
});
sock.addEventListener('close', function () {
if (!this.connected) {
connect();
}
});
}
connect();
我希望这对你有所帮助。