Workernam (websocket) - отправка данных из внешнего php-скрипта?

Рейтинг: 1Ответов: 0Опубликовано: 15.02.2023

Продолжаю эксперементы с вебсокетами на примере библиотеки Workerman. Помогите, пожалуйста, разобраться с отправкой данных из внешнего php-скрипта на бекенде в вебсокет.

Пример ws_server.php:

use Workerman\Worker;
require_once '/usr/local/workerman/vendor/autoload.php';
$ws_worker = new Worker('websocket://00.00.00.00:2346'); // указан ip реального сервера
$ws_worker->onWorkerStart = function($ws_worker) {
    $http_worker = new Worker('http://127.0.0.1:2023');
    $http_worker->onMessage = function($http_connection, $request) use ($ws_worker) {
     // этот код не выполняется
       foreach($ws_worker->connections as $connection) {
            $connection->send($request);
       }
    };
    $http_worker->listen();
 };
            
 // этот код выполняется корректно
 $ws_worker->onMessage = function ($con, $data) use ($ws_worker) {
    foreach($ws_worker->connections as $connection) {
        $connection->send($data);
    }
};
Worker::runAll(); 

Пример client.html:

<input type="number" id="input" onchange="ws.send(value); value='';" autofocus="autofocus">
<div id="div" rows="2"></div>
<script>
        ws = new WebSocket("ws://00.00.00.00:2346");
        const div = document.getElementById('div');
        const input = document.getElementById('input');
        ws.onopen = function() {
            alert("connection success");
            //console.log(ws);
        };
        ws.onmessage = function(e) {
            div.innerText += e.data + "\n";
            //console.log(e.data + "\n");
        };
    </script>

Пример backend.php:

$url = 'http://127.0.0.1:2023';
$data = '12345';
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $url,
    CURLOPT_POSTFIELDS => $data,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => array("Content-Type: application/json")
]);
$curl_result = curl_exec($ch);
curl_close($ch);
var_export($curl_result); // возвращает true

Я хочу добиться отображения данных, отправленных из backend.php ($data) в div'e в client.html. Возможно, http_worker должен пересылать данные в ws_worker? Что я делаю не так?

Ответы

Ответов пока нет.