首页 > 其他分享 >Web浏览器端通过https 使用mqtt通讯

Web浏览器端通过https 使用mqtt通讯

时间:2023-02-18 21:35:06浏览次数:54  
标签:Web 通讯 const MQTT mqtt EMQ https

做的产品简介

这次需要做一个web端的上课平台,有音视频通讯,有白板(画板)功能,有文字通讯等。
技术点

  1. 音视频通讯需要走Webrtc

  2. 需要跟ios, android, windows, mac 客户端互联互通

  3. 一般通讯通过mqtt协议

MQTT简介

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。

MQTT组成

1 Broker (server端)
有EMQ、Mosquitto、 HiveMQ等等,这次公司采用的是EMQ

2 Client(web client端)

mqtt.js https://github.com/mqttjs/MQT...
Eclipse Paho Client https://eclipse.org/paho/clie...

经过实际测验比较 Eclipse Paho的库比较好用

MQTT遇到的坑

mqtt通过http通讯还算是比较简单的,大概通过例子一个小时就可以掌握了。由于我做的项目有音视频需要webrtc,
而webrtc是必须要通过https才能通信的,So 所有的连接都必须要通过ssl加密了。但是mqtt在https下面通讯一直报错,连接不上,解决的过程比较波折

解决过程

1 部署本地https证书 (https在本地服务器环境中的部署)
通过openssl创建ssl证书
通过node.js 引入证书,代码如下

const https = require('https');

const options = {
    key: fs.readFileSync('./cert/key.pem'),
    cert: fs.readFileSync('./cert/cert.pem'),
    rejectUnauthorized: true
};

let httpserver = https.createServer(options, app);

httpserver.listen(3002, function () {
    console.log('Https server listening on port ' + 3002);
});

部署完了之后,还是通讯失败。 想到了通过https 需要https的资源

2 部署mqtt Broker(服务端)

一开始自己使用了开源的Mosquitto测试,发现很难部署https环境,后来还是直接使用了EMQ,EMQ天然支持了。
文档中也说明了端口,IOS 安卓等客户端可以直接使用 1883端口,但是web是通过 8083和 8084端口进行通讯的。
图片描述

在公司运维大神的成功协助下,配置好了 EMQ的https环境

我想这下应该好了吧,然后兴奋的用 mqtt.js 连接,结果还是报错了 :-(

3 更换mqtt client 类库
使用了Eclipse Paho Client,终于,终于,成功了
代码如下

    const mqttHost = 'm.landi.com';
    const mqttPort = 8084;
    const mqttuseSSL = true;
    
    // Create a client instance
    mqttClient = new Paho.MQTT.Client(mqttHost, Number(mqttPort), this.mqttClientID);

    // connect the client
    mqttClient.connect({onSuccess: onConnect, useSSL: mqttuseSSL});

最后,通过ios等客户端过来的消息顺利的实时抵达,在白板上画线等各种操作实现就很容易了。

图片描述

 

https://segmentfault.com/a/1190000011117061

 

标签:Web,通讯,const,MQTT,mqtt,EMQ,https
From: https://www.cnblogs.com/im18620660608/p/17133672.html

相关文章

  • Ubuntu18.04编译ZLMediakit支持webrtc
    背景最近在做流媒体相关的一些东西,比较了一些开源的流媒体服务,目前​​srs​​和​​ZlmediaKit​​项目是评价比较高的,今天主要在Ubuntu18.04上编译ZlmediaK......
  • Ubuntu18.04编译ZLMediakit支持webrtc
    背景最近在做流媒体相关的一些东西,比较了一些开源的流媒体服务,目前srs和ZlmediaKit项目是评价比较高的,今天主要在Ubuntu18.04上编译ZlmediaKit,并支持web......
  • 关于服务器端渲染的 Web 应用的 504 错误问题
    除非客户在SSR中添加了用于显式发送504的自定义逻辑,否则504不会来自SSR。在默认的Spartacus/SSR中,没有显式发送504的逻辑。默认情况下它只发送200或500(仅......
  • WEB版双色球号码随机生成代码(chatgpt)
    <!doctypehtml><html><head><title>双色球号码随机生成</title><scripttype="text/javascript">functiongenerateBall(){......
  • ctfshow web入门 命令执行 web58-71
     都是POST传递参数执行eval()函数web58if(isset($_POST['c'])){$c=$_POST['c'];eval($c);}else{highlight_file(__FILE__);}没有进......
  • Java Web(三)HTML 和 CSS
    HTML和CSS什么是HTML?HTML是一门语言,所有的网页都是用HTML这门语言编写出来的HTML(HyperTextMarkupLanguage):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大......
  • Java Web(四)JS
    JS什么是JavaScript?JavaScript是一门跨平台、面向对象的脚本语言,来控制网页行为的,它能使网页可交互W3C标准:网页主要由三部分组成结构:HTML表现:CSS行为:JavaScriptJavaScript......
  • 62-CICD持续集成工具-Jenkins构建Golang的web项目
    实现Golang应用源码编译并部署安装Golang环境#编译安装[root@jenkins~]#catinstall_go.sh#!/bin/bashGO_VERSION=1.18.4URL=https://studygolang.com/dl/golang/go${......
  • WEB开发中的页面跳转方法总结
    页面跳转可能是由于用户单击链接、按钮等触发的,也可能是系统自动产生的。页面自动跳转在WEB开发中经常用到,而且根据需求可以采用不同的跳转方式,比如提示操作信息后延时跳转......
  • Webpack中Loader和Plugin
    1.首先两者都是为了扩展webpack的功能2.Loader:webpack视一切文件为模块,但webpack原生只能解析js文件,如果想将其他文件也打包的话,就会用到loader。它只专注于转化文件......