【问题标题】:Socket IO server being broken?Socket IO 服务器坏了?
【发布时间】:2022-09-28 19:45:58
【问题描述】:

我不知道这是否是我这边的错误,但我就是不知道为什么这不起作用。

运行一个基本的 nodejs 服务器并在 nextjs 的测试页面上,socket io 工作得非常好。但是,当我在我的实际页面上使用它时,它会不断轮询并且永远不会启动 ws 连接,并且事件不起作用。轮询确实有适当的响应,带有 \"upgrades\":[\"websocket\"] 和所有。

而且,似乎在该损坏页面上的持续轮询开始之后,测试页面也开始这样做并且除非我重新启动我的 nodejs 服务器,否则它不起作用。如果我通过nextjs从测试页面导航到损坏的页面,它也可以工作,但是刷新会再次破坏它。为什么会这样?

  • 请检查我的解决方案

标签: socket.io


【解决方案1】:

您可以使用此脚本执行此操作。这是我的套接字 IO 聊天应用程序的个人工作脚本。

后端服务器

require("dotenv").config();
const port = process.env.SOCKET_PORT || 3000;
const main_server_url = process.env.SERVER_URL;
var express = require("express");
var app = express();
var server = app.listen(port);
var connectionOptions = {
  "force new connection": true,
  "reconnection": true,
  "reconnectionDelay": 2000,                  //starts with 2 secs delay, then 4, 6, 8, until 60 where it stays forever until it reconnects
  "reconnectionDelayMax": 60000,              //1 minute maximum delay between connections
  "reconnectionAttempts": "Infinity",         //to prevent dead clients, having the user to having to manually reconnect after a server restart.
  "timeout": 10000,                           //before connect_error and connect_timeout are emitted.
  "transports": ["websocket"]                 //forces the transport to be only websocket. Server needs to be setup as well/
}
var io = require("socket.io").listen(server, connectionOptions);
var axios = require("axios");

var users = [];
var connections = [];

console.log("Server connected done");

io.sockets.on("connection", function (socket) {
  var server_url = main_server_url;
  console.log(server_url);

  console.log(people);
  connections.push(socket);
  console.log("Connected : total connections are " + connections.length);

  // rest of events of socket
});

用于客户端加载 IO 的前端 JS

<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.3.0/socket.io.js"></script>

<script type="text/javascript">
    var base_url = YOUR_BASE_URL;
    var port = YOUR_SOCKET_PORT;
    var socket_port_url = base_url + ":" + port;
    var socket = io(socket_port_url);
    socket.on('done', (data) => {
        console.log(data);
    });
</script>

【讨论】:

    猜你喜欢
    • 2012-12-16
    • 1970-01-01
    • 2016-11-10
    • 2020-04-28
    • 2022-09-27
    • 2018-06-22
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多