问题描述
我需要一起实时监听 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();