﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑夜里的狼-随笔分类-MQTT</title><link>http://www.blogjava.net/hellxoul/category/54044.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 12 Dec 2013 14:25:40 GMT</lastBuildDate><pubDate>Thu, 12 Dec 2013 14:25:40 GMT</pubDate><ttl>60</ttl><item><title>linux下实施MQTT</title><link>http://www.blogjava.net/hellxoul/archive/2013/12/12/407513.html</link><dc:creator>hellxoul</dc:creator><author>hellxoul</author><pubDate>Thu, 12 Dec 2013 13:54:00 GMT</pubDate><guid>http://www.blogjava.net/hellxoul/archive/2013/12/12/407513.html</guid><wfw:comment>http://www.blogjava.net/hellxoul/comments/407513.html</wfw:comment><comments>http://www.blogjava.net/hellxoul/archive/2013/12/12/407513.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hellxoul/comments/commentRss/407513.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hellxoul/services/trackbacks/407513.html</trackback:ping><description><![CDATA[<div>     		  <p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"><span style="margin:0px;padding:0px;border:0px;outline:0px;font-style:inherit;font-family:inherit;vertical-align:baseline;line-height:19px;">mosquito 是一个MQTT 服务器。MQTT协议可用来做Android消息推送，服务器端采用mosquito+PhpMQTTClient(这个php用来做实验)</span></p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">自己不会java，不会Android开发，推送的开发部分是同事做的。使用情况表明，单台服务器能满足几万的稳定的连接数，扩展起来也不难，加机器即可。<br /></p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">下载最新版的mosquitto<br />cd /usr/local/src<br />wget http://mosquitto.org/files/source/mosquitto-1.1.2.tar.gz<br />tar zxvf mosquitto-1.1.2.tar.gz<br />cd mosquitto-1.1.2<br />如果当前openssl版本低于1.0，修改config.mk中的WITH_TLS_PSK:=no<br />make<br />make install prefix=/usr/local/mosquitto<br />为方便管理，添加下面至/etc/profile<br />export PATH=&#8221;$PATH:/usr/local/mosquitto/bin&#8221;<br />export PATH=&#8221;$PATH:/usr/local/mosquitto/sbin&#8221;</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">source /etc/profile<br />[root@mysql230 mosquitto]# mosquitto #tab补全，四个命令<br />mosquitto mosquitto_passwd mosquitto_pub mosquitto_sub</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">mosquitto服务器主程序，实现了MQTT协议<br />mosquitto_pub mosquitto发布消息的命令行程序<br />mosquitto_sub mosquitto订阅消息的命令行程序<br />默认的配置文件在 /etc/mosquitto/里</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">将/usr/local/mosquitto/lib/添加至/etc/ld.so.conf<br />执行 ldconfig -f /etc/ld.so.conf 可能需要等待数秒</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">启动<br />mosquitto （-d后台启动）<br />可能提示没有用户 mosquitto，useradd mosquitto<br />终端测试<br />客户端 mosquitto_sub -h 192.168.1.230 -t test<br />另起命令行mosquitto_pub -t test -m &#8217;123&#8242;<br />PhpMQTTClient安装<br />去https://github.com/tokudu/PhpMQTTClient 下载程序包，放置到服务器目录<br />可能需要结合实际情况，要修改的地方<br />index.php<br />$result = $conn-&gt;connect(SAM_MQTT, array(&#8216;SAM_HOST&#8217; =&gt; &#8217;127.0.0.1&#8242;, &#8216;SAM_PORT&#8217; =&gt; 1883));</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">SAM/MQTT/sam_mqtt.php<br />$this-&gt;port = 1883;</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">启动mosquitto在前台运行，以方便获取连接客户端的信息<br />mosquitto<br />在服务器另外一终端上启动订阅消息的进程，订阅所有tokudu开头topic<br />mosquitto_sub &#8211;t tokudu /+<br />注意，此处之所以要使用tokudu，可以看index.php的182行 var target = &#8216;tokudu/&#8217; + $(&#8216;#messageTarget&#8217;).val();<br />在mosquitto的终端获得mosquitto_sub客户端的id<br />1350006978: New client connected from 127.0.0.1 as mosqsub/8491-localhost..</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">访问http://host:port/ ，push notification target字段填写8491-localhost，push notification text填写需要推送的测试消息<br />在mosquitto的终端查看是否收到了推送的消息，如果收到，说明phpmqttclient已经安装配置成功</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">解决mosquitto占有cpu进程过高的问题 https://answers.launchpad.net/mosquitto/+question/189612<br />ulimit -u 4096<br />ulimit -n 4096</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;">附：<br />配置文件<br /># =================================================================<br /># General configuration<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 客户端心跳的间隔时间<br />#retry_interval 20</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 系统状态的刷新时间<br />#sys_interval 10</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 系统资源的回收时间，0表示尽快处理<br />#store_clean_interval 10</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 服务进程的PID<br />#pid_file /var/run/mosquitto.pid</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 服务进程的系统用户<br />#user mosquitto</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 客户端心跳消息的最大并发数<br />#max_inflight_messages 10</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 客户端心跳消息缓存队列<br />#max_queued_messages 100</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 用于设置客户端长连接的过期时间，默认永不过期<br />#persistent_client_expiration</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># =================================================================<br /># Default listener<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 服务绑定的IP地址<br />#bind_address</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 服务绑定的端口号<br />#port 1883</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 允许的最大连接数，-1表示没有限制<br />#max_connections -1</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># cafile：CA证书文件<br /># capath：CA证书目录<br /># certfile：PEM证书文件<br /># keyfile：PEM密钥文件<br />#cafile<br />#capath<br />#certfile<br />#keyfile</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 必须提供证书以保证数据安全性<br />#require_certificate false</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 若require_certificate值为true，use_identity_as_username也必须为true<br />#use_identity_as_username false</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 启用PSK（Pre-shared-key）支持<br />#psk_hint</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># SSL/TSL加密算法，可以使用&#8220;openssl ciphers&#8221;命令获取<br /># as the output of that command.<br />#ciphers</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># =================================================================<br /># Persistence<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 消息自动保存的间隔时间<br />#autosave_interval 1800</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 消息自动保存功能的开关<br />#autosave_on_changes false</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 持久化功能的开关<br />persistence true</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 持久化DB文件<br />#persistence_file mosquitto.db</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 持久化DB文件目录<br />#persistence_location /var/lib/mosquitto/</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># =================================================================<br /># Logging<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 4种日志模式：stdout、stderr、syslog、topic<br /># none 则表示不记日志，此配置可以提升些许性能<br />log_dest none</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 选择日志的级别（可设置多项）<br />#log_type error<br />#log_type warning<br />#log_type notice<br />#log_type information</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 是否记录客户端连接信息<br />#connection_messages true</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 是否记录日志时间<br />#log_timestamp true</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># =================================================================<br /># Security<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 客户端ID的前缀限制，可用于保证安全性<br />#clientid_prefixes</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 允许匿名用户<br />#allow_anonymous true</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 用户/密码文件，默认格式：username:password<br />#password_file</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># PSK格式密码文件，默认格式：identity:key<br />#psk_file</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># pattern write sensor/%u/data<br /># ACL权限配置，常用语法如下：<br /># 用户限制：user &lt;username&gt;<br /># 话题限制：topic [read|write] &lt;topic&gt;<br /># 正则限制：pattern write sensor/%u/data<br />#acl_file</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># =================================================================<br /># Bridges<br /># =================================================================</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 允许服务之间使用&#8220;桥接&#8221;模式（可用于分布式部署）<br />#connection &lt;name&gt;<br />#address &lt;host&gt;[:&lt;port&gt;]<br />#topic &lt;topic&gt; [[[out | in | both] qos-level] local-prefix remote-prefix]</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 设置桥接的客户端ID<br />#clientid</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接断开时，是否清除远程服务器中的消息<br />#cleansession false</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 是否发布桥接的状态信息<br />#notifications true</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 设置桥接模式下，消息将会发布到的话题地址<br /># $SYS/broker/connection/&lt;clientid&gt;/state<br />#notification_topic</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 设置桥接的keepalive数值<br />#keepalive_interval 60</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接模式，目前有三种：automatic、lazy、once<br />#start_type automatic</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接模式automatic的超时时间<br />#restart_timeout 30</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接模式lazy的超时时间<br />#idle_timeout 60</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接客户端的用户名<br />#username</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 桥接客户端的密码<br />#password</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># bridge_cafile：桥接客户端的CA证书文件<br /># bridge_capath：桥接客户端的CA证书目录<br /># bridge_certfile：桥接客户端的PEM证书文件<br /># bridge_keyfile：桥接客户端的PEM密钥文件<br />#bridge_cafile<br />#bridge_capath<br />#bridge_certfile<br />#bridge_keyfile</p><p style="padding:0px;border:0px;outline:0px;font-size:13px;font-family:arial, sans-serif;vertical-align:baseline;line-height:20px;background-color:#ffffff;margin-top:0px;margin-bottom:15px;"># 自己的配置可以放到以下目录中<br />include_dir /etc/mosquitto/conf.d</p><p><br /></p><p>本文出自 &#8220;<a href="http://cswei.blog.51cto.com/">Cooke Chen 我爱小贝</a>&#8221; 博客，请务必保留此出处<a href="http://cswei.blog.51cto.com/3443978/1225617">http://cswei.blog.51cto.com/3443978/1225617</a></p></div><img src ="http://www.blogjava.net/hellxoul/aggbug/407513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hellxoul/" target="_blank">hellxoul</a> 2013-12-12 21:54 <a href="http://www.blogjava.net/hellxoul/archive/2013/12/12/407513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>