在单一进程下,所有协程共享workerman的mqtt连接来发送数据是否可行?

bobshipwood

问题描述

假设在onWorkerStart里面创建了一个workerman的mqtt链接,底下所有协程用他来发送数据是否可行?

$worker->onWorkerStart = function ($worker) {
            try {
                $mqttClient = new \Workerman\Mqtt\Client(env('MQTT_URL'), ['client_id' => "sy-mqtt-client-".mt_rand(), 'username' => env('MQTT_USERNAME'), 'password' => env('MQTT_PASSWORD'), 'protocol_level' => 5]);
                $mqttClient->connect();
                for ($n=1; $n<=50; $n++) {
                    Coroutine::create(function () use ($mqttClient) {
                        $mqttClient->publish('test/whd/123/r', 'ok test';
                    });
                }

但毕竟mqtt是长链接,担心同一时间发送50个mqtt的时候,由于只有一个链接,所以担心他忙不过来

为此你搜索到了哪些方案及不适用的原因

没有找到。

66 1 0
1个回答

nitron

1.协程不是万能的
2.协程创建/上下文切换/销毁是有代价的
3.你这个例子不用协程理论上性能更好

  • 暂无评论
🔝