【发布时间】:2016-08-09 07:09:57
【问题描述】:
另一个更新:
在 localhost 上运行时也会出现此问题。因为我发现问题来自代理服务器,所以这是它的代码:
var serverBouncer = bouncy(function(req, res, bounce) {
var path = req.url;
var url = req.headers.host;
if (typeof url !== "string")
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);
更新:
我发现问题出在哪里了!!!但是我仍然需要找到解决方案...使用代理服务器的较新版本的 Socket.io (>= 1.0) 似乎存在问题(在我的情况下是有弹性的)。
我最近将 Socket.IO 从 v0.9.16 更新到 v1.4.5,并添加了 Express。但是,现在我无法在 Chrome 和 Firefox 中打开多个(数量似乎不同)选项卡而不会遇到奇怪的问题(Edge 是唯一一个运行良好的选项卡)。它要么挂起,要么在挂起之前部分加载 html 和其他资源。
等待之后,我经常得到错误: 加载资源失败:服务器响应状态为 400 (Bad Request)
当我关闭一个已挂起的选项卡时,它会取消阻止其他也挂起的选项卡。
在进行上述更改之前,这些问题不存在。
我已经研究了整整 2 天,现在才决定发布这个,因为我知道它非常模糊,而且我可能没有提供足够的信息。尽管我愿意,但我需要很长时间才能记住并列出我在那段时间尝试过的所有事情。
在 Chrome v51.0.2704.103、Firefox v43.0.1 中使用 Windows 10。服务器 (CentOS) 使用节点 v6.2.2,主要有以下模块:
- express@4.14.0
- npm@3.9.5
- socket.io@1.4.5
这是一些相关的服务器代码:
var port = 8502;
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);
app.get('/', function(req, res, next) {
//Returning index.html
});
io.on("connection", function(socket) {
//Some events...
});
这是一些客户端代码:
var client = io.connect();
client.on('connect', function() {
//Some events
})
【问题讨论】:
-
可能不相关,但我一直认为这一点,我认为您不应该在客户端致电
connect。连接回服务器的方法应该是var client = io(); -
您是否尝试使用您发布的最小代码?这将有助于隔离问题。
-
@pay 我已经尝试过“连接”内部和外部的事件。不能解决问题。
-
@mscdex 我已经尝试减少到最低限度,但没有尝试仅使用帖子中的 sn-ps。我会尽力回复你!
-
我不确定你指的是什么。我的意思是你用来从客户端连接到服务器的方法,你有
var client = io.connect();我相信它应该是var client = io();
标签: node.js google-chrome firefox express socket.io