我正在嘗試使用 sockets.io 在我的服務器上配置具有多個房間的 1v1 游戲。當用戶創建房間時,會生成一個由 5 個字母組成的隨機字母數字識別符號,并讓用戶加入房間。
function handleNewGame() {
let roomName = makeid(5);
client.join(roomName);
}
然后另一個用戶應該以房間名稱加入。房間名稱取自 html 主頁內的標簽,然后由函式發送。這是在服務器端處理游戲加入的功能
function handleJoinGame(roomName) {
const room = io.sockets.adapter.rooms[roomName];
}
所有這一切都包裹在一個
io.on('connection', client => {
}
問題是此時,在其他用戶甚至嘗試加入之前,房間是未定義的。
console.log(room);
這給了我不確定的。如果我嘗試實際列印出所有房間,它確實存在,但該方法找不到它。我做錯了什么?
uj5u.com熱心網友回復:
暫時忘記圖書館。從概念上講,aroom只是一組用戶。使用 for 回圈向其廣播的套接字連接陣列。它應該附帶一個,room manager因為您想要有很多房間,否則無論如何您都有單人間。
讓我們假設一個陣列物件。
var roomManager = {
"room12345" : [socket1, socket2, socket5],
"room76432" : [socket3, socket4],
}
當socket1你想廣播時,你知道它的房間room12345,所以你向那個房間里的所有其他人廣播。
所以你真的可以很容易地自己實作這個邏輯。
uj5u.com熱心網友回復:
實際上,io.sockets.adapter.rooms 回傳一個地圖。這么說,我不得不用鑰匙拿到房間,使用
const room = io.sockets.adapter.rooms.get(roomName);
我已經解決了這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/512336.html
標籤:javascript插座
下一篇:使用Python套接字編程在Linux和Windows之間進行檔案傳輸期間的UnicodeDecodeError
