使用棘轮棘爪进行多重连接

问题描述

我需要一起实时监听 2 个网络套接字 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 ($e) {
        echo "Could not connect: {$e->getMessage()}\n";
    });

解决方法

我是 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 ($e) {
    echo "Could not connect: {$e->getMessage()}\n";
});


$loop->run();

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...