上一篇我们简单讲了下mqtt服务的优点以及如何通过html5技术连接以及接受mqtt推送的。
首先,请大家明确一点,mqtt服务所使用的服务器软件,通常是mosquitto与apollo activemq,他们都是很成熟的mqtt服务器,但是程序本身并没有类似钩子的功能,如果我们直接使用mqtt的推送服务发送信息给接收端。那么这些信息就属于直接推送过去,无法将其存入数据库中。也就无法知道哪些数据存储过,哪些数据没有存储过了。
因此小沃建议发送消息使用http协议中的post请求。然后让后台接受端处理一下,再转发给mqtt服务器。
这里我们重点讲一下php语言如何发送消息给mqtt服务器的。首先,php使用mqtt需要下载一个github上的开源库链接。
大家可以看到这个开源库很简单,就一个phpMQTT.php文件。调用方式也有示例文件展示。connect()) {
$mqtt->publish("topic", "大家好,我是一条通过php发送的mqtt消息");//这里第一条是mqtt的topic值,第二条是发送的信息。
$mqtt->close();
}
?>
如果上面的代码写的没有问题,那么就应该可以发送成功了。
但是,如果大家看到这里就不往下看了,那么大家就忽略了一个非常重要的一点,mqtt连接所需要关注的4点这里只提到了2点,请大家注意,mqtt服务是有用户名密码安全机制的。
这里并没有告诉我用户名密码在哪里输入。那么如果遇到mqtt服务器添加了用户名密码,又该怎么办呢?
这里小沃通过读库的源代码,偶然发现了在connect方法中有疑似username与password的参数function connect($clean = true, $will = NULL, $username = NULL, $password = NULL){
...
因此我大胆尝试将demo中的第三句话。if ($mqtt->connect()) {
替换成if ($mqtt->connect(true, NULL, $username, $password)) {
然后去连接了一下我方的一个mqtt服务器,结果居然成功连接通了。
至此,php发送mqtt消息成功实现了,只要通过post提交方式让php接收消息,然后存一份消息到数据库,另一份消息转成mqtt服务并发送出去即可。