【问题标题】:Issues with Socket.IO with Chrome and FirefoxChrome 和 Firefox 的 Socket.IO 问题
【发布时间】: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


【解决方案1】:

在服务器监听之前你的绑定,试试这样的

var app = express();
server = app.listen(PORT, function () {
    console.log('Example app listening on port ' + PORT + '!');
});

io.listen(server);

【讨论】:

  • 它不会改变任何东西。服务器双向运行良好。
【解决方案2】:

我设法用 nginx 替换了 bouncy 模块。请参阅我的其他问题以获取解决方案。

nginx : redirect to port according to domain prefix (dynamically)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-19
    • 2011-05-29
    • 2010-11-29
    • 2011-10-13
    • 2014-02-27
    相关资源
    最近更新 更多