с другого контроллера?Вы не можете получить доступ к процессу (php script), запущенному в другом потоке (это ваш сервер).Сокет-сервер - это концентратор между подключенными клиентами, который ожидает сообщения и, если получает его, отправляет его снова (если это сказано).Другими словами - если вы хотите отправить сообщение всем подключенным клиентам, вы должны быть одним из них.
Ваш исходный код выглядит нормально, сервер должен быть запущен.Итак, проверьте это.
Самый простой способ - это открыть некоторые telnet-соединения с вашим сокет-сервером и запустить обмен сообщениями.
public function onOpen(ConnectionInterface $conn)
{
$this->clients->attach($conn);
$msg = "Connection established!\n"
echo $msg; // send server log to shell
sendMessageToAll($msg); // your initial function should be working
}
public function onMessage(ConnectionInterface $from, $msg) {
echo "Message from: {$conn->resourceId} received!\n"; //log again
sendMessageToAll($msg);
}
public function onError(ConnectionInterface $conn, \Exception $e) {
echo "Error: {$e->getMessage()}\n";
$conn->close();
}
Кроме того, отладьте функцию отправки:
public function sendMessageToAll($msg){
foreach ($this->clients as $client) {
echo "Sending message to {$client->resourceId} \n";
$client->send($msg);
}
}
Теперь откройте несколько соединений telnet с вашим портом сокет-сервера (это будет замечено на консоли сервера):
telnet 127.0.0.1 8080
и отправьте сообщение от одного из них.Опять же, вы должны получить уведомление от сервера и получить сообщение от каждого клиента telnet.