Socket.IO和Bouncy之间似乎存在一些不兼容性:在Chrome和Firefox(不在Edge中),当我打开5个以上时,我的浏览器标签会挂起。
我知道它是由NPM模块引起的" Bouncy"因为如果我删除使用它的代码,一切正常,我可以打开多少浏览器标签没有限制。另一个罪魁祸首是Socket.IO的新版本(> = 1.0,我刚刚更新到),因为当我降级回v0.9.16时,问题也会消失。
这里有一些相关的服务器代码:
var port = 8502;
var bouncy = require('bouncy');
var socketio = require('socket.io');
var express = require("express");
var http = require('http');
var app = express();
var server = http.createServer(app);
var io = socketio.listen(server);
server.listen(port);
var serverBouncer = bouncy(function(req, res, bounce) {
var path = req.url;
var url = req.headers.host;
if (typeof url !== "string") {
res.send(500);
res.end();
return;
}
var urlArray = url.split('.');
var bouncePort = port;
if (!isNaN(urlArray[0]))
bouncePort = parseInt(urlArray[0]);
else if (String(urlArray[0]).toLowerCase() === "www" && !isNaN(urlArray[1]))
bouncePort = parseInt(urlArray[1]);
bounce(bouncePort);
});
serverBouncer.listen(80);
io.on("connection", function(socket) {
//Some events...
});
以下是一些相关的客户代码:
var client = io.connect();
过去3天我一直试图解决这个问题,非常感谢任何帮助。
更新 这是chrome dev工具的网络标签的样子:
更新2:
我将socket.io(服务器端)的配置更改为强制websocket:
io.set('transports', ['websocket', 'polling']);
客户端也一样:
var client = io({transports: ['websocket', 'polling']});
但是现在我发出的事件无法到达服务器。这是网络标签的样子:
更新3: 主要组件的版本:
答案 0 :(得分:0)
我设法用nginx替换弹性模块。请参阅我的其他问题以获得解决方案。
nginx : redirect to port according to domain prefix (dynamically)