Настройка зависимостей:
"axios": "^0.18.1",
"express": "^4.17.1",
"react": "^16.8.6",
"react-dom": "^16.8.6",
"react-scripts": "2.1.8",
"socket.io": "^2.2.0",
"socket.io-client": "^2.2.0"
У меня есть приложение реагирования, которое взаимодействует с моим express js сервером. Он использует сокет io для взаимодействия с клиентом в режиме реального времени.
Каков наилучший способ структурировать код в express для нескольких комнат?
В настоящее время у меня несколько клиентов которые могут соединяться с разными комнатами. Первоначально на моем express js сервере у меня были глобальные переменные, и все работало нормально, когда несколько клиентов присоединились к одной комнате.
Проблема, конечно, возникает, когда есть другая комната с другими клиентами, я на самом деле разделяя глобальные переменные между ними. Я знаю, что это проблема (изначально я в основном делал Po C). У меня есть некоторые идеи, но я хотел бы знать, есть ли лучшие практики для структурирования кода, чтобы его можно было использовать с разными комнатами.
Например, одна из моих идей - хранить большой словарь, в котором у меня есть ключ = roomId, value = свойство мешок всех переменных, которые мне нужны для этой комнаты Это должно работать, но это не кажется самым чистым из подходов.
Есть идеи?
Кроме того, это лучший Практика, чтобы поместить весь код в основной код подключения? например:
io.on("connection", socket => {
socket.on('join', (room) => {
}
...
socket.on('anotherEvent', (room) => {
}
...
socket.on('yetAnotherEvent', (room) => {
}
});
Более конкретный пример c: скажем, у меня есть это событие и эта глобальная переменная, которую я держу, чья очередь играть в игру.
var playerTurnOrder = [];
var nextPlayer = 0;
socket.on("Pass", () => {
let room = getRoomForSocket(socket);
nextPlayer++;
io.to(socket.rooms[room]).emit("RefreshBoard", {
board: board,
pieceIntroduced: null,
nextPlayer: playerTurnOrder[nextPlayer % 4]
});
});
Код выше отлично работает, когда в игре одна комната. Если есть две комнаты (скажем, с 4 клиентами в каждой комнате), у меня теперь есть проблема, потому что я делю переменную playerTurnOrder и переменную nextPlayer.
Именно поэтому я подумал, может быть, я могу держать словарь (или Карта, как предложено в комментариях), где ключ = комната и значение = больше переменных, которые я хочу держать. Это должно сработать, но искал людей, которые сталкивались с подобными трудностями в том, как структурировать код сокета io в nodejs и с наличием несколько комнат (каналов)