Разъем.ввод-вывод создает второе сетевое подключение для клиента

#node.js #express #sockets #websocket #socket.io

Вопрос:

Поэтому я создаю шахматное приложение и подключаю своих клиентов к socket.io. Они отлично общаются примерно на 30-40 ходов, но неизбежно один из моих клиентов спонтанно создает новое соединение с сокетом, которое переопределяет исходное.

Вот снимки экрана:

Нормальное соединение:

Нормальное Соединение

Дублированное соединение:

дублированный

Клиент с дублированным соединением не может получать никаких новых ходов, а клиент, у которого все еще есть нормальное соединение, ждет, когда другой клиент отправит ход, поэтому он просто полностью застрял.

Вот мой сокращенный код сервера, относящийся к сокетам:

 const app = express();
const PORT = process.env.PORT || 9000;
const { Server } = require("socket.io");
const server = app.listen(PORT, () => 'Listening on port ${PORT}');
const socketServer = new Server(server, {
    cors: {
        methods: ["GET", "POST"],
        transports: ["websocket", "polling"],
        credentials: true,
    },
    transports: ["websocket", "polling"],
    allowEIO3: true,
    reconnection: true,
    reconnectionDelay: 1000,
    reconnectionDelayMax: 5000,
    reconnectionAttempts: Infinity,
});

const roomStates = {};
const clientRooms = {};

// Handle socket connection request from a web client
socketServer.on("connection", (socket) => {
    //... all my socket events
}
 

And here is my client code in my root index.jsx file:

 // Instantiate Socket Listeners
import { io } from "socket.io-client";
window.socket = io({ transports: ["websocket"] });
 

So I really just don’t know what is going on. I am happy to bring in some more code from my events but I don’t think they are fully necessary