我正在使用socket_write
打开websocket并将数据传递给node.js socket.io服务器。我正在发送一些像这样的HTML:
private function openSocketConnection($address = 'localhost', $port = 5600)
{
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($socket, $address, $port);
return $socket;
}
$socket = $this->openSocketConnection();
socket_write($socket, $html, strlen($html));
这很好用,并将我的数据发送到我的node.js socket.io服务器,我就这样抓住它:
socket.on('data', (msg) => {});
但我现在想要将数据发送到特定的房间而不是一般的socket.io房间。有这种设置,我可以指定一个房间吗?
也许在使用socket_create()
或其他什么时?显然,如果可能的话,我想阻止在每个socket_write
上传递房间名称。
答案 0 :(得分:2)
客户端只能将数据发送到服务器本身。如果要向特定会议室中的所有用户发送消息,请创建客户端可以发送的消息,告知服务器代表客户端执行此操作。
// client-side
socket.emit("sendToRoom", {room: "someRoom", data: "Hello"});
然后在服务器上:
socket.on('sendToRoom', function(msg) {
// send to all clients in the room except the socket client
socket.broadcast.to(msg.room, msg.data);
});
如果客户端只在一个房间,那么您可以让客户端只是发送消息广播到其当前房间,并让服务器查找它所在的房间。这样,客户端不会每次都要送房间。