mqtt接收設(shè)備的消息,wss server連接微信小程序,如何把一方的消息轉(zhuǎn)發(fā)到另一方?
$mqtt_worker = new Worker();
$mqtt_worker->onWorkerStart = function(){
$options = [
'username' => 'mq_user_00001',
'password' => 'qiR89ns',
'resubscribe' => true,
'client_id' => 'client_id_00001',
'clean_session' => true,
];
$mqtt = new Workerman\Mqtt\Client('mqtt://127.0.0.1:1883',$options);
$mqtt->onConnect = function($mqtt) {
echo("\n mqtt-onConnect \n");
echo(date('Y-m-d H:i:s')."\n");
$mqtt->subscribe('pzb/ws/v1/up/+');//$mqtt->subscribe('pzb/ws/v1/up/Dev00001');
log_mqtt('[onConnect]');
};
$mqtt->onMessage = function($topic, $content, $mqtt){
echo("\n mqtt-onMessage \n");
echo(date('Y-m-d H:i:s')."\n");
//如何把$content通過wss發(fā)送出去?
};
$mqtt->connect();
};
// 證書最好是申請的證書
$context = array(
// 更多ssl選項請參考手冊 http://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 請使用絕對路徑
'local_cert' => '/www/wwwroot/www.dog.com/dog_com.pem', // 也可以是crt文件
'local_pk' => '/www/wwwroot/www.dog.com/dog_com.key',
'verify_peer' => false,
'allow_self_signed' => false, //如果是自簽名證書需要開啟此選項
)
);
// 這里設(shè)置的是websocket協(xié)議(端口任意,但是需要保證沒被其它程序占用)
$wss_worker = new Worker('websocket://0.0.0.0:8282', $context);
// 設(shè)置transport開啟ssl,websocket+ssl即wss
$wss_worker->transport = 'ssl';
$wss_worker->onConnect = function(TcpConnection $con) {
echo("\n\nwss_worker--onConnect:\n");
echo(date('Y-m-d H:i:s')."\n");
echo($con->getRemoteIp()."\n");
log_wss('['.$con->getRemoteIp().'][onConnect]');
};
$wss_worker->onMessage = function(TcpConnection $con, $msg) {
echo("\n\nwss_worker--onMessage:\n");
echo(date('Y-m-d H:i:s')."\n");
echo($con->getRemoteIp()."\n");
log_wss('['.$con->getRemoteIp().'][onMessage]'.$msg);
var_dump($msg);
$con->send('ok');
//如何把msg通過mqtt發(fā)送出去?
};
mqtt本質(zhì)就是訂閱/發(fā)布,
用emqx做服務(wù)端, emqx是支持wss方式接入的。
設(shè)備發(fā)布topic到emqx , 小程序訂閱相同的topic , 就會收到消息,不用額外操作 。
如果涉及更復(fù)雜的轉(zhuǎn)發(fā),emqx支持消息入mysql, 還有hook
mqtt就是處理emqx的消息,需要處理后轉(zhuǎn)發(fā),而不是單純的轉(zhuǎn)發(fā)消息。比如收到一個ping,然后回復(fù)pong,應(yīng)該怎么做呢。
處理完消息以后用 : $mqtt->publish(); 向指定主題發(fā)送消息??词謨裕?http://wtbis.cn/doc/workerman/components/workerman-mqtt.html#publish