Ratchet: Proper way of creating two websockets and sharing data between sockets?

Created on 3 Oct 2017  路  2Comments  路  Source: ratchetphp/Ratchet

So I've followed a rough outline of another example on another post to creating multiple websockets and to share data between the two:

    class WebSocketBridge implements MessageComponentInterface {
        public function onOpen(ConnectionInterface $conn) { }
        // etc
    }

    class WebSocketClients implements MessageComponentInterface {
        private $delegate;

        public function __construct(MessageComponentInterface $delegate) {
            $this->delegate = $delegate;
        }

        public function onOpen(ConnectionInterface $conn) {
            $conn->source = 'MainClients';
            $this->delegate->onOpen($conn);
        }
    }

    class WebSocketOthers { // etc, like WebSocketClients
    }

My biggest struggle at the moment is figuring how to run the servers. The following code does not work...at least it won't initialize both servers. It'll only open a connection on the 1st server:

    use Ratchet\Server\IoServer;
    use App\WebSocketClients;

    use App\WebSocketOthers;
    use App\WebSocketBridge;

    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;

    require dirname(__DIR__) . '/vendor/autoload.php';

    $bridge = new WebSocketBridge ;

    $loop = React\EventLoop\Factory::create();

    $server = IoServer::factory(
        new WebSocketClients($bridge),
        8989
    );

    $server2 = IoServer::factory(
        new HttpServer(
            new WsServer(
                new WebSocketOthers($bridge)
            )
        ),
        9090
    );

    $server->run();
    $server2->run();

I've tried to do the following, but running into an error about Argument 2 integer issues.

    $bridge = new WebSocketBridge;

    $loop = React\EventLoop\Factory::create();

    $PCAServer = new IoServer(new WebSocketClients($bridge), 8989, $loop);

    $wsServer = new IoServer(new HttpServer(new WsServer(new WebSocketOthers($bridge))), 9090, $loop);

    $loop->run();
docs question

Most helpful comment

It seems I've solved my own issue. For those who need some help implementing this:

    use Ratchet\Server\IoServer;
    use App\WebSocketClients;

    use App\WebSocketOthers ;
    use App\WebSocketBridge;

    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;

    require dirname(__DIR__) . '/vendor/autoload.php';

    $bridge = new WebSocketBridge;

    $loop = React\EventLoop\Factory::create();

    $port1 = 8989;
    $address1 = '127.0.0.1';

    $socket1 = new React\Socket\Server($loop);
    $socket1->listen($port1, $address1);

    $port2 = 9090;
    $address2 = '127.0.0.1';

    $socket2 = new React\Socket\Server($loop);
    $socket2->listen($port2, $address2);

    $clientServer = new IoServer(new WebSocketClients($bridge), $socket1, $loop);
    $wsServer = new IoServer(new HttpServer(new WsServer(new WebSocketOthers ($bridge))), $socket2, $loop);

    $loop->run();

All 2 comments

It seems I've solved my own issue. For those who need some help implementing this:

    use Ratchet\Server\IoServer;
    use App\WebSocketClients;

    use App\WebSocketOthers ;
    use App\WebSocketBridge;

    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;

    require dirname(__DIR__) . '/vendor/autoload.php';

    $bridge = new WebSocketBridge;

    $loop = React\EventLoop\Factory::create();

    $port1 = 8989;
    $address1 = '127.0.0.1';

    $socket1 = new React\Socket\Server($loop);
    $socket1->listen($port1, $address1);

    $port2 = 9090;
    $address2 = '127.0.0.1';

    $socket2 = new React\Socket\Server($loop);
    $socket2->listen($port2, $address2);

    $clientServer = new IoServer(new WebSocketClients($bridge), $socket1, $loop);
    $wsServer = new IoServer(new HttpServer(new WsServer(new WebSocketOthers ($bridge))), $socket2, $loop);

    $loop->run();
Was this page helpful?
0 / 5 - 0 ratings

Related issues

piotrchludzinski picture piotrchludzinski  路  5Comments

Erseni picture Erseni  路  5Comments

Lugia101101 picture Lugia101101  路  7Comments

rukavina picture rukavina  路  4Comments

elovin picture elovin  路  3Comments