国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于mqtt組件的publish的一些問題,或者說,想請教下思路

pidong
<?php
require __DIR__ . '/../vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
    $mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
    $mqtt->onConnect = function($mqtt) {
       $mqtt->publish('test', 'hello workerman mqtt');
    };
    $mqtt->connect();
};
Worker::runAll();

如示例中:每次publish主題時,都要new Client 。是不是意味著我每次對同一主題發(fā)布消息,都會創(chuàng)建一個連接/子進(jìn)程,最后爆滿。
?
目前的業(yè)務(wù)是有很多設(shè)備,需要上傳自身狀態(tài),服務(wù)器也可以下發(fā)指令。目前訂閱有通配符,創(chuàng)建很少的客戶端,再解析就能實現(xiàn)更新設(shè)備屬性。但是下發(fā)指令因為上面這個顧慮卡住了。對進(jìn)程這方面不是很懂。想問下有影響嗎。如果有影響,有沒有其他方式處理?
?
?
?

7205 4 0
4個回答

damao

不用每次創(chuàng)建一個啊,創(chuàng)建一個然后保存起來,下次再復(fù)用就行。

  • pidong 2019-01-03

    不是太懂,請教下如何保存,下次如何取用呢

damao
<?php
require __DIR__ . '/../vendor/autoload.php';
use Workerman\Worker;
$worker = new Worker();
$worker->onWorkerStart = function(){
? ? global $mqtt;
? ? $mqtt = new Workerman\Mqtt\Client('mqtt://test.mosquitto.org:1883');
? ? $mqtt->onConnect = function($mqtt) {
?? ? ? $mqtt->publish('test', 'hello workerman mqtt');
? ? };
? ? $mqtt->connect();
};
$worker->onMessage = function($con, $msg){
? ? global $mqtt;
? ? $mqtt->publish(.....);
};
Worker::runAll();

沒測試過,不過感覺這樣就可以

  • pidong 2019-01-03

    多謝,的確是個思路,我先嘗試嘗試

  • pidong 2019-01-03

    onMessage應(yīng)該是接收到消息時觸發(fā)的,我publish時應(yīng)該是主動的。好像邏輯上不通

  • pidong 2019-01-03

    我總是覺得其實我只是需要創(chuàng)建一個客戶端,不管發(fā)布訂閱都用這一個客戶端實例,是不是可以讓這個實例跟隨workman存在內(nèi)存中,不管發(fā)布還是訂閱先看這個實例存在不存在,如果存在就用,不存在就創(chuàng)建一個

  • damao 2019-01-03

    上面的代碼就是這樣的,創(chuàng)建了一個實例跟隨workerman內(nèi)存中

  • damao 2019-01-03

    上面只是一個例子,并不是說一定讓你在onMessage里去publish啊

  • pidong 2019-01-04

    @16:的確是你的思路提醒的

pidong

http://doc.workerman.net/faq/push-in-other-project.html
看來我文檔還是沒看仔細(xì),這里有相關(guān)解答

  • 暫無評論
dmjlovehj

您解決沒有呀,,給我說說呀,我也是這樣的情況 也不知道 怎么弄了 ,

  • 暫無評論
年代過于久遠(yuǎn),無法發(fā)表回答
??