<?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)程這方面不是很懂。想問下有影響嗎。如果有影響,有沒有其他方式處理?
?
?
?
<?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();
沒測試過,不過感覺這樣就可以
我總是覺得其實我只是需要創(chuàng)建一個客戶端,不管發(fā)布訂閱都用這一個客戶端實例,是不是可以讓這個實例跟隨workman存在內(nèi)存中,不管發(fā)布還是訂閱先看這個實例存在不存在,如果存在就用,不存在就創(chuàng)建一個
http://doc.workerman.net/faq/push-in-other-project.html
看來我文檔還是沒看仔細(xì),這里有相關(guān)解答