Я хочу использовать веб-сокеты в существующем чате, и у меня есть следующий код (из примеров из socketo.me):
Толкатель
class Pusher implements WampServerInterface
{
protected $subscribedTopics = [];
public function onSubscribe(ConnectionInterface $conn, $topic)
{
var_dump('on subscribe');die;
}
public function onPushEventData($event)
{
var_dump('push event');die;
}
}
сервер WebSocket
public function actionStartSocket()
{
$loop = \React\EventLoop\Factory::create();
$pusher = new Pusher();
$context = new \React\ZMQ\Context($loop);
$pull = $context->getSocket(\ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($pusher, 'onPushEventData'));
$webSock = new \React\Socket\Server('127.0.0.1:8081', $loop);
$webServer = new IoServer(
new HttpServer(
new WsServer(
new WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
}
И у меня есть метод для хранения сообщений в базе данных.
Данные поступают в POST
запросе от Ajax и, если они успешно сохраняются, отправляют сообщение в websocket и возвращают сохраненный объект клиенту.
$message = $this->saveMessage($dialog, $currentUser, (string)$message);
$context = new \ZMQContext();
$socket = $context->getSocket(\ZMQ::SOCKET_PUSH);
$socket->connect("tcp://127.0.0.1:5555");
$socket->send(json_encode([
"status" => true
]));
return $message;
Я не могу отправить данные с сервера на веб-сокет.
Я использую Apache в качестве веб-сервера и считаю, что конфигурация virtualHost неверна.
Windows 10
Apache 2.4.33
и модули:
proxy
proxy_http
proxy_wstunnel
PHP 7.2.4
Храповик (http://socketo.me)
Кто-нибудь сталкивался с подобной проблемой?
Config:
<VirtualHost *:80>
ServerName proj
DocumentRoot "c:/proj"
<Directory "c:/proj/">
Options +Indexes +Includes +FollowSymLinks
+MultiViews AllowOverride All Require local
</Directory>
RewriteEngine on
RewriteCond %{QUERY_STRING} transport=polling
RewriteRule /(.*)$ http://127.0.0.1:5555/$1 [P]
ProxyRequests off
ProxyPass / ws://127.0.0.1:5555
</VirtualHost>