3

I am creating a function to interact with multiple projects. There are two projects in one there are applications to fill and in another project, all application response can be seen. I wanted to implement a function to update the application response whenever someone fills the application, for this task I wanted to use WebSockets to interact between project and update(append with new response) page whenever I get msg from WebSockets.

Now while connecting with WebSockets over https and wss I'm not able to connect and getting an error like "ERR_SSL_PROTOCOL_ERROR" But works fine when I use ws to connect over http.I'm using a self-signed certificate on localhost.

<?php
require_once 'Autoloader.php';
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

// массив для связи соединения пользователя и необходимого нам параметра
$users = [];

// создаём локальный tcp-сервер, чтобы отправлять на него сообщения из кода нашего сайта
$tcp_worker = new Worker("tcp://127.0.0.1:1234");
// создаём обработчик сообщений, который будет срабатывать,
// когда на локальный tcp-сокет приходит сообщение
$tcp_worker->onMessage = function($connection, $data) use ($tcp_worker)
{
    // пересылаем сообщение во все остальные соединения - это 4 ws-сервера, код которых будет ниже
    foreach ($tcp_worker->connections as $id => $webconnection) {
        if ($connection->id != $id) {
            $webconnection->send($data);
        }
    }
};
$context = array(
    'ssl' => array(
        'local_cert' => '/private/etc/apache2/ssl/localhost.pem',
        'local_pk'   => '/private/etc/apache2/ssl/localhost.key',
    )
);

// Create a Websocket server with ssl context.
$ws_worker = new Worker("websocket://0.0.0.0:8000", $context);
// создаём ws-сервер, к которому будут подключаться все наши пользователи
// $ws_worker = new Worker("websocket://0.0.0.0:8000");
$ws_worker->count = 4;
// создаём обработчик, который будет выполняться при запуске каждого из 4-х ws-серверов
$ws_worker->onWorkerStart = function() use (&$users)
{
    //подключаемся из каждого экземпляра ws-сервера к локальному tcp-серверу
    $connection = new AsyncTcpConnection("tcp://0.0.0.0:1234");
    $connection->onMessage = function($connection, $data) use (&$users) {
        $data = json_decode($data);
        // отправляем сообщение пользователю по userId
        if (isset($users[$data->user])) {
            $webconnection = $users[$data->user];
            $webconnection->send($data->message);
        }
    };
    $connection->connect();
};

$ws_worker->onConnect = function($connection) use (&$users)
{
    $connection->onWebSocketConnect = function($connection) use (&$users)
    {
        // при подключении нового пользователя сохраняем get-параметр, который же сами и передали со страницы сайта
        $users[$_GET['user']] = $connection;
        // вместо get-параметра можно также использовать параметр из cookie, например $_COOKIE['PHPSESSID']
    };
};

$ws_worker->onClose = function($connection) use(&$users)
{
    if(isset($users[$connection->uid]))
    {
        // удаляем параметр при отключении пользователя
        unset($users[$connection->uid]);
    }
};

// Run worker
Worker::runAll();

Front-end Code

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <script>
        ws = new WebSocket("wss://127.0.0.1:8000/?user=tester01");
        ws.onmessage = function(evt) {alert(evt.data);};
    </script>
</head>
</html></source>
Compsci_guy
  • 55
  • 1
  • 9
  • Possible duplicate of [WebSocket secure connection self signed certificate](https://stackoverflow.com/questions/45089384/websocket-secure-connection-self-signed-certificate) – gre_gor Sep 11 '17 at 18:44
  • I tried to remove ssl part and used as normal Worker with Server IP but i'm not able to start the server.php shows error `$ws_worker = new Worker("websocket://*.*.*.*:9013");` `$connection = new AsyncTcpConnection("tcp://*.*.*.*:8000");` `unable to connect to tcp://*.*.*.*:8000 (Cannot assign requested address) in /var/www/html/website/dev/websockets/Worker.php on line 1649 PHP Fatal error: Uncaught exception 'Exception' with message 'Cannot assign requested address' in /var/www/html/website/dev/websockets/Worker.php:1651` – Compsci_guy Sep 12 '17 at 15:22

0 Answers0