zoukankan      html  css  js  c++  java
  • JS通过mqtt连接Activemq收发数据

    最近因为一些业务的需要,测试了一下JS通过mqtt连接Activemq服务器收发数据的功能,这里做一个简单的记录,activemq服务器的话请自行安装配置,我这里的版本是apache-activemq-5.15.3。有兴趣的话可以下载demo

    demo地址 提取码:ah9b

    一、测试页面如下所示

     

    未连接页面
    未连接页面

     

    连接成功后

     

    收发数据
    收发数据

     

    二、测试代码如下

    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <title>Chat Example Using MQTT Over WebSockets</title>
            <!--[if lt IE 9]>
                <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
            <![endif]-->
            <link href="css/bootstrap.min.css" rel="stylesheet" />
            <link href="css/bootstrap.min.responsive.css" rel="stylesheet" />
            <style type="text/css">
                body {
                    padding-top: 40px;
                }
            </style>
        </head>
    
        <body>
            <div class="navbar navbar-fixed-top">
                <div class="navbar-inner">
                    <div class="container">
                        <a class="brand" href="#">ActiveMQ MQTT WebSocket Chat Example</a>
                    </div>
                </div>
            </div>
    
            <div class="container-fluid">
                <div class="row-fluid">
                    <div class="span6">
                        <div id="connect">
                            <div class="page-header">
                                <h2>Server Login</h2>
                            </div>
                            <form class="form-horizontal" id="connect_form">
                                <fieldset>
                                    <div class="control-group">
                                        <label>Host</label>
                                        <div class="controls">
                                            <input name="host" id="connect_host" value="192.168.1.204" type="text" />
                                        </div>
                                    </div>
                                    <div class="control-group">
                                        <label>Port</label>
                                        <div class="controls">
                                            <input name="url" id="connect_port" value="61614" type="text" />
                                        </div>
                                    </div>
                                    <div class="control-group">
                                        <label>Client ID</label>
                                        <div class="controls">
                                            <input id="connect_clientId" placeholder="id" value="example" type="text" />
                                        </div>
                                    </div>
                                    <div class="control-group">
                                        <label>User ID</label>
                                        <div class="controls">
                                            <input id="connect_user" placeholder="User ID" value="zy" type="text" />
                                        </div>
                                    </div>
                                    <div class="control-group">
                                        <label>Password</label>
                                        <div class="controls">
                                            <input id="connect_password" placeholder="User Password" value="Zy123" type="password" />
                                        </div>
                                    </div>
                                    <div class="control-group">
                                        <label>Destination</label>
                                        <div class="controls">
                                            <input id="destination" placeholder="Destination" value="linka" type="text" />
                                        </div>
                                    </div>
                                    <div class="form-actions">
                                        <button id="connect_submit" type="submit" class="btn btn-large btn-primary">Connect</button>
                                    </div>
                                </fieldset>
                            </form>
                        </div>
                        <div id="connected" style="display:none">
                            <div class="page-header">
                                <h2>Chat Room</h2>
                            </div>
                            <div id="messages"></div>
                            <form class="well form-search" id="send_form">
                                <button class="btn" type="button" id="disconnect" style="float:right">Disconnect</button>
                                <input class="input-medium" id="send_form_input" placeholder="Type your message here" class="span6" />
                                <button class="btn" type="submit">Send</button>
                            </form>
                        </div>
                    </div>
                    <div class="span4">
                        <div class="page-header">
                            <h2>Debug Log</h2>
                        </div>
                        <pre id="debug"></pre>
                    </div>
                </div>
            </div>
    
            <!-- Scripts placed at the end of the document so the pages load faster -->
            <script src="js/jquery-1.7.2.min.js"></script>
            <script src="js/mqttws31.js"></script>
    
            <script>
                //<![CDATA[
                $(document).ready(function() {
                    $("#connect_clientId").val("example-" + Math.floor(Math.random() * 100000));
    
                    if (!window.WebSocket) {
                        console.log("不支持websocket");
                    } else {
                        var client, destination;
    
                        $("#connect_form").submit(function() {
                            var host = $("#connect_host").val();
                            var port = $("#connect_port").val();
                            var clientId = $("#connect_clientId").val();
                            var user = $("#connect_user").val();
                            var password = $("#connect_password").val();
    
                            destination = $("#destination").val();
    
                            // Messaging为mqttws31.js定义的对象
                            
                            client = new Messaging.Client(host, Number(port), clientId);
                            console.log(client);
                            client.onConnect = onConnect;
    
                            client.onMessageArrived = onMessageArrived;
                            client.onConnectionLost = onConnectionLost;
    
                            client.connect({
                                userName: user,
                                password: password,
                                onSuccess: onConnect,
                                onFailure: onFailure
                            });
                            return false;
                        });
    
                        // the client is notified when it is connected to the server.
                        var onConnect = function(frame) {
                            debug("connected to MQTT");
                            $("#connect").fadeOut({ duration: "fast" });
                            $("#connected").fadeIn();
                            client.subscribe(destination);
                        };
    
                        // this allows to display debug logs directly on the web page
                        var debug = function(str) {
                            $("#debug").append(document.createTextNode(str + "
    "));
                        };
    
                        $("#disconnect").click(function() {
                            client.disconnect();
                            $("#connected").fadeOut({ duration: "fast" });
                            $("#connect").fadeIn();
                            $("#messages").html("");
                            return false;
                        });
    
                        // 发送数据
                        $("#send_form").submit(function() {
                            var text = $("#send_form_input").val();
                            if (text) {
                                message = new Messaging.Message(text);
                                message.destinationName = destination;
                                client.send(message);
                                $("#send_form_input").val("");
                            }
                            return false;
                        });
    
                        function onFailure(failure) {
                            debug("failure");
                            debug(failure.errorMessage);
                        }
    
                        function onMessageArrived(message) {
                            var p = document.createElement("p");
                            var t = document.createTextNode(message.payloadString);
                            p.appendChild(t);
                            $("#messages").append(p);
                        }
    
                        function onConnectionLost(responseObject) {
                            if (responseObject.errorCode !== 0) {
                                debug(client.clientId + ": " + responseObject.errorCode + "
    ");
                            }
                        }
                    }
                });
                //]]>
            </script>
        </body>
    </html>
  • 相关阅读:
    n&(n-1)计算比特位1的个数的原理
    gentoo安装apache、nginx、php、mariadb、openssl(https)
    记一次基于vmware的gentoo安装
    Nim 游戏 -(拿石头游戏)
    八皇后问题(N皇后问题)
    ARM架构和Cortex的关系
    某些STM32芯片在开启看门狗后仿真到断点处看门狗不会停止计数导致程序复位的问题
    STM32F103 PB3,PB4特殊引脚的配置
    pc端自适应方案
    左右躲避障碍-神手ts版本
  • 原文地址:https://www.cnblogs.com/MandyCheng/p/12654471.html
Copyright © 2011-2022 走看看