#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