Добрый день.
В общем установил phpDaemon. Создал пул, создал приложение. Запустил. В логах все UP. Подключить хоть убейте не могу. Статус ошибки 3 (disconnected).
Что сделал:
Pool:Servers\WebSocket {
enable 1;
privileged;
listen 'tcp://0.0.0.0';
port 8047;
}
MyWebSocket {}
Приложение:
<?php
namespace PHPDaemon\Applications;
class MyWebSocket extends \PHPDaemon\Core\AppInstance {
public $enableRPC=true; // Без этой строчки не будут работать широковещательные вызовы
public $sessions=array(); // Здесь будем хранить указатели на сессии подключившихся клиентов
// С этого метода начинается работа нашего приложения
public function onReady() {
$appInstance = $this;
// Метод timerTask() будет вызываться каждые 5 секунд
$this->timerTask($appInstance);
// Наше приложение будет доступно по адресу ws://site.com:8047/myws
\PHPDaemon\Servers\WebSocket\Pool::getInstance()->addRoute('myws', function ($client) use ($appInstance) {
$session=new MyWebSocketRoute($client, $appInstance); // Создаем сессию
$session->id=uniqid(); // Назначаем ей уникальный ID
$this->sessions[$session->id]=$session; //Сохраняем в массив
return $session;
});
}
function timerTask($appInstance) {
// Отправляем каждому клиенту свое сообщение
foreach($this->sessions as $id=>$session) {
$session->client->sendFrame('This is private message to client with ID '.$id, 'STRING');
}
// После отправляем всем клиентам сообщение от каждого воркера (широковещательный вызов)
$appInstance->broadcastCall('sendBcMessage', array(\PHPDaemon\Core\Daemon::$process->getPid()));
// Перезапускаем наш метод спустя 5 секунд
\PHPDaemon\Core\Timer::add(function($event) use ($appInstance) {
$this->timerTask($appInstance);
$event->finish();
}, 5e6); // Время задается в микросекундах
}
// Функция для широковещательного вызова (при вызове срабатывает во всех воркерах)
public function sendBcMessage($pid) {
foreach($this->sessions as $id=>$session) {
$session->client->sendFrame('This is broadcast message from worker #'.$pid, 'STRING');
}
}
}
class MyWebSocketRoute extends \PHPDaemon\WebSocket\Route {
public $client;
public $appInstance;
public $id; // Здесь храним ID сессии
public function __construct($client,$appInstance) {
$this->client=$client;
$this->appInstance=$appInstance;
}
// Этот метод срабатывает сообщении от клиента
public function onFrame($data, $type) {
// Отправляем ему ответ
$this->client->sendFrame('Server receive from client #'.$this->id.' message "'.$data.'"', 'STRING');
}
// Этот метод срабатывает при закрытии соединения клиентом
public function onFinish() {
// Удаляем сессию из массива
unset($this->appInstance->sessions[$this->id]);
}
}
Воркеры указал от 1 до 50. Все вроде сделал хорошо, перезапустил phpd. Зашел в логи, все хорошо:
Wed, 8 Aug 2018 10:41:25.090911 +0000] W#12834 \PHPDaemon\Applications\MyWebSocket up.
[Wed, 8 Aug 2018 10:45:44.521788 +0000] M#12851 \PHPDaemon\Core\Pool:Servers\WebSocket up.
[Wed, 8 Aug 2018 10:45:44.529519 +0000] M#12851 \PHPDaemon\Core\Pool:\PHPDaemon\Servers\WebSocket\Pool up.
[Wed, 8 Aug 2018 10:45:44.544001 +0000] W#12853 \PHPDaemon\Applications\MyWebSocket up.
[Wed, 8 Aug 2018 10:45:45.738843 +0000] Spawning 1 worker(s)
[Wed, 8 Aug 2018 10:45:46.046952 +0000] W#12855 \PHPDaemon\Applications\MyWebSocket up.
Подключаюсь к ws://10.10.10.23:8047/myws (сервер локальный). Не фурычит. Все уже перепробовал.
Подскажите что не так я сделал ?