Я сейчас пользуюсь socket_write
открыть веб-сокет и передать данные на сервер 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
если возможно.
Клиенты могут отправлять данные только на сам сервер. Если вы хотите отправить сообщение всем пользователям в определенной комнате, то создайте сообщение, которое клиент может отправить, которое скажет серверу сделать это от имени клиента.
// 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);
});
Если клиент находится только в одной комнате, вы можете попросить клиента просто отправить сообщение для трансляции в свою текущую комнату, а сервер посмотреть, в какой комнате он находится. Таким образом, клиенту не нужно каждый раз отправлять комнату. ,
Других решений пока нет …