我無法將活動廣播到特定的房間。socket.broadcast.to未被任何客戶端收到
我檢查房間裏的客戶,他們似乎已經正確地加入了房間。
但是socket.broadcast.to(socket.roomChannel).emit("cardSelected", cardInfo)
根本就沒有工作,
而socket.broadcast.emit("cardSelected", cardInfo)
作品(但我只需要廣播到房間)。
這是推動我瘋了...... 這裏是我的代碼,不工作的部分是一路底部:
// Setup basic express server
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = '4000';
server.listen(port, function() {
});
this.rooms = [];
let lastRoomId = 0
let lastPlayerId = 0
io.on('connection', function (socket) {
// send list of rooms at connect
socket.emit("connected", {rooms: this.rooms});
socket.id = ++lastPlayerId;
// Room
socket.on('createRoom', (roomName) => {
const room = {
id: ++lastRoomId,
name: roomName,
players: [],
}
this.rooms.push(room);
socket.emit("roomCreated", room);
socket.broadcast.emit("update_rooms", {rooms: this.rooms});
});
socket.on('joinRoom', (id) => {
const index = this.rooms.map(room => room.id).indexOf(id);
if (index >= 0) {
this.rooms[index].players.push(socket.id);
socket.emit("roomJoined", this.rooms[index]);
socket.roomId = id;
socket.roomChannel = this.rooms[index].name;
socket.join(socket.roomChannel);
socket.broadcast.emit("update_rooms", {rooms: this.rooms});
}
});
// Game
socket.on('cardSelected', (cardInfo) => {
console.log("broadcasting to", socket.roomChannel);
console.log("socket room", socket.rooms);
var clients = io.sockets.adapter.rooms[socket.roomChannel].sockets;
// Shows that the clients ARE in the room
// returns "{ '1': true, '2': true }" if I have two clients
console.log(clients);
// DOESNT WORK!!
socket.broadcast.to(socket.roomChannel).emit("cardSelected", cardInfo)
// DOESNT WORK!!
io.to(socket.roomChannel).emit("cardSelected");
// Works
socket.broadcast.emit("cardSelected", cardInfo);
});
});
我也試過socket.to(socket.roomChannel).emit("cardSelected", cardInfo);
(不包括廣播),沒有任何成功
您確定除了播放廣播節目之外,您還在同一個房間中有其他套接字嗎?你確定'socket.roomChannel'包含正確的值嗎? – jfriend00
是的,正如我在代碼中顯示的那樣:var clients = io.sockets.adapter.rooms [socket.roomChannel] .sockets; //顯示客戶端位於房間內 //如果我有兩個客戶端,則返回「{'1':true,'2':true}」 console.log(clients); ' –
你是否在調試器中逐步完成它,看看它在做什麼?這就是我會做的。 – jfriend00