Node.js Socket.io с Redis – Как изменить только определенный ключ в объекте? ⇐ Javascript
-
Гость
Node.js Socket.io с Redis – Как изменить только определенный ключ в объекте?
Клиенты могут создавать лобби, которые сохраняются в Redis в формате объекта { . Затем клиенты присоединяются к лобби или покидают его, что потребует обновления только определенных ключей внутри объекта лобби.
В частности, здесь, когда клиент отключается, если он находится в лобби, сервер регистрирует информацию, get весь LOBBY_LIST, обновляя небольшая часть delete json[user.currentLobby].users[socket.id], затем set сохраняет весь LOBBY_LIST обратно в базу данных. Это кажется небрежным и неправильным и уже доставляет мне проблемы.
Как правильно реализовать такую функцию?
socket.on( 'disconnect', async ( ) => { пытаться { console.log(`\x1b[33m[Worker${process.pid}]\x1b[0m ${user.id} отключен` ); if(!user.currentLobby) return; const LOBBY_LIST = ждут storeClient.get('LOBBY_LIST'); вар json = JSON.parse(LOBBY_LIST); если (json[user.currentLobby] == null) return; удалить json[user.currentLobby].users[socket.id]; if( Object.keys( json[user.currentLobby].users).length == 0) delete json[user.currentLobby]; storeClient.set('LOBBY_LIST', JSON.stringify(json)); сокет.emit('serverJoinLobby', 'успех'); } поймать( е ) { console.log(е); } }); Объект каждого лобби
const лобби = { имя: данные.имя, карта: данные.карта, тип: data.type, userMax: данные.userMax, пользователи: { }, // содержит сокет клиента комнаты.id хост: сокет.id };
Клиенты могут создавать лобби, которые сохраняются в Redis в формате объекта { . Затем клиенты присоединяются к лобби или покидают его, что потребует обновления только определенных ключей внутри объекта лобби.
В частности, здесь, когда клиент отключается, если он находится в лобби, сервер регистрирует информацию, get весь LOBBY_LIST, обновляя небольшая часть delete json[user.currentLobby].users[socket.id], затем set сохраняет весь LOBBY_LIST обратно в базу данных. Это кажется небрежным и неправильным и уже доставляет мне проблемы.
Как правильно реализовать такую функцию?
socket.on( 'disconnect', async ( ) => { пытаться { console.log(`\x1b[33m[Worker${process.pid}]\x1b[0m ${user.id} отключен` ); if(!user.currentLobby) return; const LOBBY_LIST = ждут storeClient.get('LOBBY_LIST'); вар json = JSON.parse(LOBBY_LIST); если (json[user.currentLobby] == null) return; удалить json[user.currentLobby].users[socket.id]; if( Object.keys( json[user.currentLobby].users).length == 0) delete json[user.currentLobby]; storeClient.set('LOBBY_LIST', JSON.stringify(json)); сокет.emit('serverJoinLobby', 'успех'); } поймать( е ) { console.log(е); } }); Объект каждого лобби
const лобби = { имя: данные.имя, карта: данные.карта, тип: data.type, userMax: данные.userMax, пользователи: { }, // содержит сокет клиента комнаты.id хост: сокет.id };
Мобильная версия