Задать вопрос
@mcigorli

Почему нет ответа от клиента websocket к серверу websocket, workerman?

Просто ничего нет.Ни ошибок ничего.
От сервера приходит сообщение о коннекте, от клиента не приходит ничего..
Может ли быть такое что мой ubuntu18.04 как-то блокирует коннект к другому серверу ? Или мой код неверный?
Через приложение WSS хром к клиенту подключается без проблем как wss так и ws. (ну это так для теста). Так что Проблемы явно на моей стороне либо в коде либо на сервере.
Помогите кто чем сможет!
спасибо!

<?php
require_once __DIR__ . '/vendor/autoload.php'; 
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Connection\AsyncTcpConnection;

// SSL context.
$context = [ 'ssl' => [ 'local_cert' => '/etc/letsencrypt/live/utelimited.ru/fullchain.pem',
'local_pk' => '/etc/letsencrypt/live/utelimited.ru/privkey.pem',
'verify_peer' => false,
]
];
global $connection;
//==============================server
// Create a Websocket server
$ws_worker = new Worker ("websocket://0.0.0.0:100", $context);
$ws_worker->transport = 'ssl'; 


// Emitted when new connection come
$ws_worker-> onConnect = function($connection)
{
	 $connection->onWebSocketConnect = function($connection) 
    {
	 echo "New connection\n";
	 $connection->send ('Server OK: ' . $data);
	};
 };

// Emitted when data received
$ws_worker-> onMessage = function($connection, $data)
{
	// Send hello $data
    $connection->send ('hello ' . $data);
};

// Emitted when connection closed
 $ws_worker-> onClose = function($connection)
{
 echo "Connection closed\n";
};

 
//=============================== CLIENT
 
$worker_wss = new Worker ();
$worker_wss ->onWorkerStart = function() {
	foreach($ws_worker->connection as $connection) {
			$connection->send("connect client");
	}
	// Websocket protocol for client.
    $ws_connection = new AsyncTcpConnection('ws://ws.eodhistoricaldata.com/ws/crypto?api_token=demo');
	$ws_connection-> onConnect = function ($connection_wss) {
		foreach($ws_worker->connections as $connection) {
			$connection->send("connect client");
		}
	}; 
	$ws_connection->onMessage = function ($connection_wss, $data) {
		foreach($ws_worker->connections as $connection) {
			$connection->send($data);
		}
	}; 
	$ws_connection->onError = function ($connection_wss, $code, $msg) {
		echo "Error:  $msg\n";
		foreach($ws_worker->connections as $connection) {
			$connection->send($msg);
		}
	};
	$ws_connection->onClose = function ($connection_wss) {
		echo "Connection closed\n";
		foreach($ws_worker->connections as $connection) {
			$connection->send("close client");
		}
	}; 
	$ws_connection->connect();
};

// Run worker
Worker::runAll();
  • Вопрос задан
  • 245 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@mcigorli Автор вопроса
Вопрос решён.
Дело было в версии библиотеки workerman.
старая версия файла AsyncTcpConnection.php
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Immortal_pony
@Immortal_pony Куратор тега PHP
Во-первых, чего ты вообще пытаетешься добиться? Зачем подключаться клиентом к серверу в этом же файле? Не уверен что это вообще сработает, но теоретически возможно...

Во-вторых,
foreach($ws_worker->connection as $connection) {
     $connection->send("connect client");
}

При старте воркера клиента ты хвататешь объект с connection'ами сервера и перебираешь их? Как, зачем, и чего ты хочешь этим добиться?

В-третьих:
$ws_connection = new AsyncTcpConnection('ws://ws.eodhistoricaldata.com/ws/crypto?api_token=demo');

О, кажется пошли куда-то коннектитться.
Предположим, что ws.eodhistoricaldata.com - это твой сервер. И даже, что с помощью reverse proxy ты завернул этот url на порт 100 своего сайта, но вот что за "/ws/crypto" и "api_token=demo"? По коду выше видно, что твой сервер ни с чем таким не умеет работать. Ты точно туда коннектишься, куда хочешь?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽