假设在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的时候,由于只有一个链接,所以担心他忙不过来
没有找到。
1.协程不是万能的
2.协程创建/上下文切换/销毁是有代价的
3.你这个例子不用协程理论上性能更好