@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();
  • Вопрос задан
  • 196 просмотров
Решения вопроса 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"? По коду выше видно, что твой сервер ни с чем таким не умеет работать. Ты точно туда коннектишься, куда хочешь?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
25 апр. 2024, в 14:44
10000 руб./за проект
25 апр. 2024, в 14:44
250 руб./в час