MQTT服务器端配置

来源:互联网 发布:交换机网络配置 编辑:程序博客网 时间:2024/06/08 08:31

之前做项目的时候写了一个服务器,一开始架构没想好,在需使用长连接的地方,使用了轮询的方法,导致服务器负载很重。老板推荐使用MQTT协议作为长连接的协议,于是我就在已有的win系统下面spring框架基础上增加MQTT协议部分。花了一晚上,总结一下步骤:

步骤如下:

(1)下载apache-apollo-1.7.1-windows-distro.zip,下载后解压,打开cmd,cd到apache-apollo-1.7.1-windows-distro.目录下,然后,输入apollo create test(名字任意取,这里是根据官网介绍的来取的)创建服务器实例,服务器实例包含了所有的配置,运行时数据等,并且和一个服务器进程关联。

(2)create mybroker之后会在bin目录下生成mybroker文件夹,里面包含有很多信息,其中etc\apollo.xml文件下是配置服务器信息的文件,etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,后面会介绍,可以修改原始的admin=password,可以接着换行添加新的用户名密码。

(3)打开cmd,cd到apache-apollo-1.7.1-windows-distro.目录下 运行apollo-broker run 开启服务器,可以在浏览器中输入http://127.0.0.1:61680/查看是否安装成功,该界面展示了topic,连接数等很多信息。

(4)下载jar包,http://ftp.jaist.ac.jp/pub/eclipse/paho/releases/1.1.0/Java/plugins/org.eclipse.paho.client.mqttv3_1.1.0.jar,放到spring项目的lib下面

(5)服务器发布消息代码如下:

Server.java

package cn.smartslim.mqtt.demo.paho;    import org.eclipse.paho.client.mqttv3.MqttClient;  import org.eclipse.paho.client.mqttv3.MqttConnectOptions;  import org.eclipse.paho.client.mqttv3.MqttDeliveryToken;  import org.eclipse.paho.client.mqttv3.MqttException;  import org.eclipse.paho.client.mqttv3.MqttMessage;  import org.eclipse.paho.client.mqttv3.MqttPersistenceException;  import org.eclipse.paho.client.mqttv3.MqttTopic;  import org.eclipse.paho.client.mqttv3.internal.MemoryPersistence;    public class Server {        public static final String HOST = "tcp://127.0.0.1:1883";        public static final String TOPIC = "tokudu/yzq124";      private static final String clientid ="server";         private MqttClient client;      private MqttTopic topic;      private String userName = "test";      private String passWord = "test";        private MqttMessage message;        public Server() throws MqttException {           //MemoryPersistence设置clientid的保存形式,默认为以内存保存          client = new MqttClient(HOST, clientid, new MemoryPersistence());          connect();      }            private void connect() {          MqttConnectOptions options = new MqttConnectOptions();          options.setCleanSession(false);          options.setUserName(userName);          options.setPassword(passWord.toCharArray());          // 设置超时时间          options.setConnectionTimeout(10);          // 设置会话心跳时间          options.setKeepAliveInterval(20);          try {                                client.connect(options);                 topic = client.getTopic(TOPIC);          } catch (Exception e) {                 e.printStackTrace();          }      }            public void publish(MqttMessage message) throws MqttPersistenceException, MqttException{          MqttDeliveryToken token = topic.publish(message);          token.waitForCompletion();          System.out.println(token.isComplete()+"========");      }        public static void main(String[] args) throws MqttException {          Server server =  new Server();          server.message = new MqttMessage();          server.message.setQos(1);          server.message.setRetained(true);          server.message.setPayload("eeeeeaaaaaawwwwww---".getBytes());           server.publish(server.message);           System.out.println(server.message.isRetained()+"------ratained状态");      }    }  

(6)由于是真的服务器,就在防火墙把1883这个端口打开

(7)我只是想知道服务器能不能直接集成这个协议,客户端就先下载了一个成品exe,可以直接接收订阅的消息。COMNET.exe


搞定,接下来就要准备为各个客户端写订阅消息这端了,有QT,VS2010 C++,c#,后面慢慢搞


原创粉丝点击