JavaScript使用MQTT_js mqtt-程序员宅基地

技术标签: JavaScript、Cesium  网络  websocket  网络协议  javascript  

目录

1、安装MQTT服务器

2、启动emqx,woesocket

3、编写服务端(发布)

4、编写客户端(订阅接收)

5、效果展示


目的:前端接收mqtt消息,例如实时展示位置信息等。

1、安装MQTT服务器

可以使用网络提供的公共服务器也可以自建,例如这里安装EMQX。

下载 EMQX

输入emqx_ctl staus,出现以上说明已启动。 

2、 启动emqx,woesocket

输入本地emqx地址,例如http://127.0.0.1:18083/,打开websocket页面,确定好host,port等信息并启动,后续会用到这些信息。这实际上是个mqtt管理页面,后续连接到mqtt也能在该页面查看连接状态等信息。

3、编写服务端(发布)

这里用python写(实在是方便),语言不限。mqtt以及相关库自行安装。

#coding=utf-8
import paho.mqtt.client as mqtt
import random
import json

def on_connect(client,userdata,flags,rc):
    print("Connected with result code: "+str(rc))

def on_message(client,userdata,msg):
    print(msg.topic+" "+str(msg.payload))

client=mqtt.Client()
client.on_connect=on_connect
client.on_message=on_message
client.connect('你的ip',1883,600)

//这边模拟输出100个点位坐标(lon,lat,height)
for i in range(0,100):
    client.publish('你的topic',json.dumps({
    'lon':120+random.randint(0,2000)/2000,
    "lat":28+random.randint(0,2000)/2000,
    "height":random.randint(0,1000)/100
},ensure_ascii=False))

4、编写客户端(订阅接收)

 javascript编写客户端接受信息。

<script src="https://cdnjs.cloudflare.com/ajax/libs/paho-mqtt/1.0.1/mqttws31.min.js"></script>

<script>

        var hostname = '你的ip', 
            port = 8083, //这里就是第二步配置的port
            clientId = 'client-test',
            timeout = 5,
            keepAlive = 100,
            cleanSession = false,
            ssl = false,
            topic = '你的tpic';
        client = new Paho.MQTT.Client(hostname, port, clientId);
        //建立客户端实例  
        var options = {
            invocationContext: {
                host: hostname,
                port: port,
                path: client.path,
                clientId: clientId
            },
            timeout: timeout,
            keepAliveInterval: keepAlive,
            cleanSession: cleanSession,
            useSSL: ssl,
            // userName: userName,  
            // password: password,  
            onSuccess: onConnect,
            onFailure: function (e) {
                console.log(e);
                s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", onFailure()}";
                console.log(s);
            }
        };
        client.connect(options);
        //连接服务器并注册连接成功处理事件  
        function onConnect() {
            console.log("onConnected");
            s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", onConnected()}";
            console.log(s);
            client.subscribe(topic);
        }

        client.onConnectionLost = onConnectionLost;

        //注册连接断开处理事件  
        client.onMessageArrived = onMessageArrived;

        //注册消息接收处理事件  
        function onConnectionLost(responseObject) {
            console.log(responseObject);
            s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", onConnectionLost()}";
            console.log(s);
            if (responseObject.errorCode !== 0) {
                console.log("onConnectionLost:" + responseObject.errorMessage);
                console.log("连接已断开");
            }
        }

        function onMessageArrived(message) {
            s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", onMessageArrived()}";
            console.log(s);
            console.log("收到消息:" + message.payloadString);
        }

        function send() {
            var s = document.getElementById("msg").value;
            if (s) {
                s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", content:" + (s) + ", from: web console}";
                message = new Paho.MQTT.Message(s);
                message.destinationName = topic;
                client.send(message);
                document.getElementById("msg").value = "";
            }
        }

        var count = 0;

        function start() {
            window.tester = window.setInterval(function () {
                if (client.isConnected) {
                    var s = "{time:" + new Date().Format("yyyy-MM-dd hh:mm:ss") + ", content:" + (count++) +
                        ", from: web console}";
                    message = new Paho.MQTT.Message(s);
                    message.destinationName = topic;
                    client.send(message);
                }
            }, 1000);
        }

        function stop() {
            window.clearInterval(window.tester);
        }

        Date.prototype.Format = function (fmt) { //author: meizz 
            var o = {
                "M+": this.getMonth() + 1, //月份 
                "d+": this.getDate(), //日 
                "h+": this.getHours(), //小时 
                "m+": this.getMinutes(), //分 
                "s+": this.getSeconds(), //秒 
                "q+": Math.floor((this.getMonth() + 3) / 3), //季度 
                "S": this.getMilliseconds() //毫秒 
            };
            if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
            for (var k in o)
                if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[
                    k]) : (("00" + o[k]).substr(("" + o[k]).length)));
            return fmt;
        }
    </script>

5、效果展示

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_34785556/article/details/127286401

智能推荐

selenium判断元素可点击、可见、可选_selenium判断按钮是否可点击-程序员宅基地

文章浏览阅读846次。1、元素若有is_enabled属性,则是不可点击,否则就是可点击2、元素若有is_display:none属性,则是不可见的,否则就是可见的3、元素若有selected属性,则是已被选择。_selenium判断按钮是否可点击

关于CCS添加c文件报错问题解决办法:gmake: *** [Source/DSP2833x_GlobalVariableDefs.obj] Error 1_ccs自己添加sci.c和sci.h文件后报错-程序员宅基地

文章浏览阅读206次,点赞2次,收藏2次。创建工程添加相关的.c文件后系统报错,工程结构如下:查阅相关资料发现是系统头文件添加有问题,右击项目名称-properties-C2000 compiler-include Options 添加相关头文件,编译之后还是报错;然后又查阅资料发现需要在上面方框添加头文件路径,并且需要把下面添加的头文件路径删除;重新编译,问题解决!_ccs自己添加sci.c和sci.h文件后报错

ubuntu root用户登录_ubuntu root登陆-程序员宅基地

文章浏览阅读7.3k次,点赞4次,收藏15次。【代码】ubuntu root用户登录。_ubuntu root登陆

安防摄像头网页直播_安防摄像头在线直播-程序员宅基地

文章浏览阅读181次。目前市面上安防厂家主要有海康、大华、宇视、华为、中威电子……,视频协议包含私有的协议,国标GB28181,ONVIF,RTSP, 以及其他主动注册协议,如海康的EHOME。视频云服务平台LiveMedia是基于开放式、大融合、全兼容、标准化的设计架构理念,依据《安全防范视频监控联网系统信息传输、交换、控制技术要求》(GB/T 28181-2011/2016)标准、ONVIF标准、RTSP、EHOME协议以及各厂家SDK开发,集流媒体转发、视频编码、视频管理、标准通信协议、..._安防摄像头在线直播

notepad++ 应用NppExec插件配置Java编译运行快捷方式-程序员宅基地

文章浏览阅读146次。notepad++版本信息安装NppExec插件添加命令npp_savecd $(CURRENT_DIRECTORY)javac $(FILE_NAME)java $(NAME_PART)打开输入并保存添加宏重启npp即可还可以设置快捷键,快速启动结束..._notepad设置javac编译快捷键

【Leetcode刷题篇】leetcode46 全排列_leetcode 全排列js-程序员宅基地

文章浏览阅读235次。题目:给定一个 没有重复 数字的序列,返回其所有可能的全排列。示例:示例:输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]题解:回溯法package com.lcz.leetcode;import java.util.*;public class Leetcode46 { public List<List<Integer>> permute(int[] nums._leetcode 全排列js

随便推点

devops_1-程序员宅基地

文章浏览阅读329次。DevOps 博客 | 关于研发运维一体化(DevOps)的一切http://devopshub.cn/Home - DevOps.comhttps://devops.com/

学习笔记:Maxent的示例运行及部分结果解释_maxent结果解读-程序员宅基地

文章浏览阅读2w次,点赞25次,收藏171次。文件准备Samples文件.csv格式通常为三列,分别为“物种”、“经度”、“纬度”Tips: 默认情况下会删除重复项(同一网格单元中同一物种的多个记录),可以通过设置取消Environmental layers(栅格)文件.asc格式必须具有相同的地理边界和单元格大小运行示例1、导入Samples(csv格式)、Environmental layers(asc格式/也可以直接选择包含asc文件的文件夹)2、勾选3、设置结果存储路径-Output directory4、_maxent结果解读

【Windows7下安装各种版本MySQL】_windows6.1-kb976932-x64-程序员宅基地

文章浏览阅读1.9k次。Windows7/10下安装MySQL_windows6.1-kb976932-x64

angularjs动态添加ng-click_angular 动态绑定点击事件-程序员宅基地

文章浏览阅读894次。注入$compile ,例:var str="测试动态click";var newstr=$compile(str)($scope); $dom.empty().append(newstr);_angular 动态绑定点击事件

xchariot使用笔记_ixchariot是用什么端口-程序员宅基地

文章浏览阅读2.3k次。xChariot测试WAN-LAN的吞吐量,把脚本中send和receive那一行swap一下子。 跑chariot前要打开双方的endpoint,在chariot的安装目录下:我的是在D:\Program Files\Ixia\EndPoint. 他们跑WAN到LAN用的DMZ主机,wan口PC和wan口跑chariot,就可以达到lan口PC。 &lt;&lt;&lt; 使用xChar..._ixchariot是用什么端口

IDEA中database使用教程_ideadatabase-程序员宅基地

文章浏览阅读8.5k次。本文采用了IDEA开发工具专业版,自带的Database工具可以用来访问、操作数据库,支持MySQL、Oracle、Db2、ClickHouse、PostgreSQL等多种类型的数据库。_ideadatabase

推荐文章

热门文章

相关标签