Workernam (websocket) - отправка данных из внешнего php-скрипта?
Продолжаю эксперементы с вебсокетами на примере библиотеки 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? Что я делаю не так?
Источник: Stack Overflow на русском