【问题标题】:socket.io creates multiple sockets per connectionsocket.io 为每个连接创建多个套接字
【发布时间】:2018-01-19 13:22:16
【问题描述】:

有时,当服务器有点负载时,当有人连接到页面时,会创建多个套接字,如果非常滞后,则该人可能永远无法连接,而每秒会重复创建一次额外的套接字,以无穷大,直到它停止。知道它为什么会这样做吗?

服务器端代码:

var express = require('express'); //FOR LOCALHOSTING!
var Victor = require('victor');

var app = express();

var server = app.listen(process.env.PORT || 3000, listen);

function listen() {
  var host = server.address().address;
  var port = server.address().port;
  console.log("server is up");
}

app.use(express.static('public'));

var io = require('socket.io')(server);

客户端:

var socket = io();

我的意图是每个网页连接只创建一个套接字,因为为每个创建的套接字生成一个新播放器。

注意:如果给服务器足够的时间,服务器实际上会删除错误创建的套接字(但速度不够快,不实用)

【问题讨论】:

  • 你在使用 socket.io-client 吗?
  • 是的,当然...
  • 你是如何断定服务器正在为每个连接打开一个新套接字的?
  • 每次触发 io.sockets.on("connection") 时,它都会通过控制台登录到服务器……我多次收到该消息并看到多个玩家。正如我之前所说,每个套接字连接都会产生一个新玩家......并且正在创建多个玩家
  • 我认为您必须向我们展示您认为导致此问题的实际客户端和服务器 socket.io 代码。现在,您只向我们展示了您并不真正相关的 Express 代码。而且,我建议您在服务器上同时记录 connectdisconnect 消息,并在日志消息中使用 socket.id 值和当前系统时间,这样您就可以看到连接和断开连接的确切顺序并获得一些更好的时间观念。如果没有看到相关代码,我们很难提供帮助 - 必须比您目前所展示的更多。

标签: javascript node.js socket.io


【解决方案1】:

在这种情况下,我会转移到SharedWorkerServiceWorker 中的websocket 逻辑。它会将每个用户(浏览器)的连接数减少到 1 个。

【讨论】:

    猜你喜欢
    • 2016-10-26
    • 2017-04-26
    • 1970-01-01
    • 2019-06-06
    • 2013-04-08
    • 2023-03-28
    • 1970-01-01
    • 2013-07-31
    相关资源
    最近更新 更多