使用socket_write传递socket.io房间?

时间:2017-09-11 22:51:55

标签: php node.js sockets websocket socket.io

我正在使用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上传递房间名称。

1 个答案:

答案 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);
});

如果客户端只在一个房间,那么您可以让客户端只是发送消息广播到其当前房间,并让服务器查找它所在的房间。这样,客户端不会每次都要送房间。