@walkor,
業(yè)務邏輯是這樣的: 設備A通過mqtt協(xié)議 向 Mosquitto服務器上的某個Topic發(fā)布消息,php的mqtt客戶端通過輪詢訂閱這個Topic來實時獲取設備A上報的數(shù)據(jù),然后存入數(shù)據(jù)庫。
php端的mqtt client 這邊我已經(jīng)有實現(xiàn)的類,此類提供訂閱和發(fā)布接口..
目前我這邊實現(xiàn)部分代碼:
$topics = array("qos"=>0, "function"=>"getmsg"); //getmsg 回調(diào)方法, 取得數(shù)據(jù)
$mqtt->subscribe($topics,0); //訂閱主題
while($mqtt->proc()){ //proc() 心跳等及其他實現(xiàn)
}
只是單純的通過while(){} 去主題上訂閱消息 性能及穩(wěn)定性是不是會很差?
mqtt已有成熟的Mosquitto作為服務器,請問下,workerman可以用來實現(xiàn)mqtt的客戶端嗎?
如果可以的話 我把怎么把代碼移植到workerman框架里.麻煩walkor說下具體的思路,感激不盡~
單個腳本while(){}循環(huán)穩(wěn)定性要差一些,需要有個主進程監(jiān)控這個腳本是否異常退出。
workerman可以作為mqtt的客戶端,實際上就是開發(fā)一個mqtt協(xié)議類。
自定義協(xié)議可以參考下手冊 定制通訊協(xié)議一章 http://doc.workerman.net/protocols/why-protocols.html
作為客戶端使用效果類似
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker();
$worker->onWorkerStart = function()
{
$client_connection = new AsyncTcpConnection('mqtt://ip:port');
$client_connection->onMessage = function($client_connection, $message)
{
var_dump($message);
};
$client_connection->onConnect/onError/onClose...
$client_connection->connect();
};