【问题标题】:Multiple connect using ratchet pawl使用棘轮棘爪进行多重连接
【发布时间】:2021-03-18 05:21:47
【问题描述】:

我需要同时实时监听 2 个 Web 套接字 URL。我创建了 2 个连接到不同的 URL,但我只看到第一条消息结果。如何在不关闭第一个连接的情况下从 wss://exalpme2 获取消息? 我的代码示例

    \Ratchet\Client\connect('wss://exalpme1')->then(function($conn) {
        $conn->on('message', function($msg) use ($conn) {
            echo "Received: {$msg}\n";
        });
    }, function ($e) {
        echo "Could not connect: {$e->getMessage()}\n";
    });

    \Ratchet\Client\connect('wss://exalpme2')->then(function($conn) {
        $conn->on('message', function($msg) use ($conn) {
            echo "Received: {$msg}\n";
        });
    }, function ($e) {
        echo "Could not connect: {$e->getMessage()}\n";
    });

【问题讨论】:

    标签: ratchet reactphp


    【解决方案1】:

    我是 ReactPHP 核心团队的一员。看起来您选择了自述文件顶部的简单示例。当您只打开一个连接时,这很好,但在您的情况下,您想要的不止于此。在自述文件的底部是一个更高级的示例,但这有点过分了。考虑以下执行以下操作的代码。

    • 它使用共享事件循环而不是在辅助函数中创建一个
    • 打开两个 websocket 连接
    • 显示这些连接何时发生错误
    • 显示这些连接何时关闭
    • 启动事件循环
    require __DIR__ . '/vendor/autoload.php';
    
    $loop = \React\EventLoop\Factory::create();
    $connector = new \Ratchet\Client\Connector($loop);
    
    $connector('wss://exalpme1')->then(function($conn) {
        $conn->on('message', function($msg) use ($conn) {
            echo "Received: {$msg}\n";
        });
        $conn->on('error', function(\Throwable $t) {
            echo $t;
        });
        $conn->on('close', function($code = null, $reason = null) {
            echo "Connection closed ({$code} - {$reason})\n";
        });
    }, function ($e) {
        echo "Could not connect: {$e->getMessage()}\n";
    });
    $connector('wss://exalpme1')->then(function($conn) {
        $conn->on('message', function($msg) use ($conn) {
            echo "Received: {$msg}\n";
        });
        $conn->on('error', function(\Throwable $t) {
            echo $t;
        });
        $conn->on('close', function($code = null, $reason = null) {
            echo "Connection closed ({$code} - {$reason})\n";
        });
    }, function ($e) {
        echo "Could not connect: {$e->getMessage()}\n";
    });
    
    
    $loop->run();
    

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 2021-09-20
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2013-10-24
      • 2017-12-11
      • 2018-06-29
      相关资源
      最近更新 更多