1. 程式人生 > >EMQ2.3 開啟wss、對映去掉埠號

EMQ2.3 開啟wss、對映去掉埠號

一直在微信公眾號上使用mqtt協議控制智慧裝置,但新需求是要在小程式上執行。
小程式要求:
1、要求介面使用HTTPS,SSL1.2以上,
2、ws需要修改為wss,wss後面不能跟埠號。
花費了一些時間解決,記錄整個過程。
這裡寫圖片描述

開啟配置WSS

修改emq.conf配置檔案

首先想到的是修改emq.conf配置檔案
位置是:/etc/emqttd/emq.conf
根據官方文件新增相關證書

##--------------------------------------------------------------------
## External MQTT/WebSocket/SSL Listener
listener.wss.external = 8084 listener.wss.external.acceptors = 4 listener.wss.external.max_clients = 64 listener.wss.external.access.1 = allow all ## SSL Options listener.wss.external.handshake_timeout = 15s #listener.wss.external.keyfile = /etc/emqttd/certs/key.pem listener.wss.external.keyfile = /etc/emqttd/certs/web.com
.key #listener.wss.external.certfile = /etc/emqttd/certs/cert.pem listener.wss.external.certfile = /etc/emqttd/certs/web.com.pem ## listener.wss.external.cacertfile = /etc/emqttd/certs/cacert.pem ## listener.wss.external.verify = verify_peer ## listener.wss.external.fail_if_no_peer_cert = true

重啟服務之後無效果!

升級EMQ版本

後來考慮到可能是版本的問題,將2.3.0升級到最新2.3.4版本,但還是不行。

解決方法

通過ps -ef | grep emqttd發現配置檔案引入的不是/etc/emqttd/emq.conf,
而是-config /var/lib/emqttd/configs/app.2018.02.26.17.56.21.config

emqtt    18682 18665  0 Feb26 pts/1    00:01:03 /usr/lib64/emqttd/erts-9.0/bin/beam.smp -W w -e 256000 -Q 65536 -P 256000 -A 32 -K true -zdbbl 32768 -- -root /usr/lib64/emqttd -progname usr/sbin/emqttd -- -home /var/lib/emqttd -- -boot /usr/lib64/emqttd/releases/2.3/emqttd -mode embedded -boot_var ERTS_LIB_DIR /usr/lib64/emqttd/erts-9.0/../lib -mnesia dir "/var/lib/emqttd/mnesia/[email protected]" -config /var/lib/emqttd/configs/app.2018.02.26.17.56.21.config -kernel net_ticktime 60 -smp auto -setcookie emqsecretcookie -name [email protected]127.0.0.1 -vm_args /var/lib/emqttd/configs/vm.2018.02.26.17.56.21.args -- console

這裡寫圖片描述
檢視config內容
內容如下:

          {ssl,8883,
               [{connopts,[]},
                {sockopts,
                    [{backlog,1024},
                     {send_timeout,15000},
                     {send_timeout_close,true},
                     {nodelay,true},
                     {reuseaddr,true}]},
                {sslopts,
                    [{handshake_timeout,15000},
                     {keyfile,"/etc/emqttd/certs/key.pem"},
                     {certfile,"/etc/emqttd/certs/cert.pem"},
                     {reuse_sessions,true}]},
                {acceptors,16},
                {max_clients,1024},
                {access,[{allow,all}]}]},
           {wss,8084,
               [{connopts,[]},
                {sockopts,
                    [{backlog,1024},
                     {send_timeout,15000},
                     {send_timeout_close,true},
                     {nodelay,true},
                     {reuseaddr,true}]},
                {sslopts,
                    [{handshake_timeout,15000},
                     {keyfile,"/etc/emqttd/certs/key.pem"},
                     {certfile,"/etc/emqttd/certs/cert.pem"},
                     {reuse_sessions,true}]},
                {acceptors,4},
                {max_clients,64},
                {access,[{allow,all}]}]},

這裡寫圖片描述
直接將域名證書修改key.pem和cert.pem,然後重啟。
測試成功!
這裡寫圖片描述

wss對映方法

nginx配置

        location /mqtt {
           access_log /wwwlogs/com.log;
           proxy_pass https://localhost:8084/mqtt;
           proxy_read_timeout 60s;
           proxy_set_header Host $host;
           proxy_set_header X-Real_IP $remote_addr;
           proxy_set_header X-Forwarded-for $remote_addr;
           proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection 'Upgrade';
        }

修改mqttws庫

修改mqttws31.js庫中的內容,去掉埠號

      if (arguments.length == 2) {
          // host: must be full ws:// uri
          // port: clientId
          clientId = port;
          uri = host;
          var match = uri.match(/^(wss?):\/\/((\[(.+)\])|([^\/]+?))(:(\d+))?(\/.*)$/);
          if (match) {
              host = match[4]||match[2];
              port = parseInt(match[7]);
              path = match[8];
          } else {
              throw new Error(format(ERROR.INVALID_ARGUMENT,[host,"host"]));
          }
      } else {
          if (arguments.length == 3) {
        clientId = path;
        path = "/mqtt";
      }
      if (typeof port !== "number" || port < 0)
        throw new Error(format(ERROR.INVALID_TYPE, [typeof port, "port"]));
      if (typeof path !== "string")
        throw new Error(format(ERROR.INVALID_TYPE, [typeof path, "path"]));

      var ipv6AddSBracket = (host.indexOf(":") != -1 && host.slice(0,1) != "[" && host.slice(-1) != "]");
      // uri = "ws://"+(ipv6AddSBracket?"["+host+"]":host)+":"+port+path;
      //去埠號
      uri = "ws://"+(ipv6AddSBracket?"["+host+"]":host)+path;
    }

注意: 今天發現相關專案web端傳送mqtt訊息提示“com.actions.mqtt.PublishThread - Client is not connected”, 因為重啟了emqttd服務,web端沒有自動連結上mqtt,重新java專案後正常。

相關推薦

EMQ2.3 開啟wss對映去掉

一直在微信公眾號上使用mqtt協議控制智慧裝置,但新需求是要在小程式上執行。 小程式要求: 1、要求介面使用HTTPS,SSL1.2以上, 2、ws需要修改為wss,wss後面不能跟埠號。 花費了一些時間解決,記錄整個過程。 開啟配置WSS

雲主機上Centos7配置Iptables規則開啟803306等

用MobaXtrem遠端連線h3c雲平臺主機,再在雲平臺上用MobaXtrem連線h3c內網的Centos7主機,現在Centos7裝了mysql、tomcat等想開啟3306、80埠,下面討論配置iptables並開啟相應埠步驟:Centos7預設使用firewall作為防

Linux工作筆記028---Centos7.3 檢視tomcat所佔用的

netstat命令用來列印Linux中網路系統的狀態資訊,可讓你得知整個Linux系統的網路情況。 語法 netstat(選項) 選項 -a或--all:顯示所有連線中的Socket; -A<網路型別>或--<網路型別>:列出該網路型別連線中

Linux工作筆記027---Centos7.3 檢視tomcat所佔用的

看看下面的圖就搞定了,執行兩個命令,先找到tomcat的pid,然後,根據pid找到埠 可以這樣看: 1、先檢視tomcat的程序號 ps -ef | grep tomcat* 後面帶*號,是為了檢視多個tomcat,例如tomcat6,tomcat7。

tomcat從 http轉成https,並且去掉

強制使用HTTPS方式訪問Tomcat中的相關專案,於是研究了下,現將具體的步驟寫下:    主要分2步:讓tomcat能使用https--->強制使用https訪問1.讓tomcat能使用https  A.在執行命令JAVA_HOME/bin/keytool -ge

大資料各元件的開啟命令及WEB UI

元件 開啟 關閉 WEB UI埠號 jps顯示 Falocn bin/falcon-start bin/falcon-stop 15443 Falconserver Oozie

centos7 安裝 mysql 修改預設並開放

下載mysql源安裝包wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm安裝mysql源 yum localinstall mysql57-community-release-el7

MFC的檔案開啟讀取檔案內容訊息傳遞多執行緒多串列的使用

最近做的專案簡單總結一下,因為對MFC不是很熟,所以簡單記錄一下。 順便發現可以在VS2017編譯的工程,放到VS2012反而有很多編譯無法通過。 1、MFC的檔案開啟框(多位元組) char* cFileName=NULL; //儲存檔案 ​ void CToolD

WampServer 3.0.4 64bit自定義虛擬目錄多站點配置

WampServer 3.0.4 64bit自定義虛擬目錄、多站點配置、埠號 1. 自定義虛擬目錄 首先在C盤建立了一個名叫PHP的資料夾 然後 開啟WAMP安裝目錄->點選bin->apache->config->extra->httpd-vho

linux centos開啟 80223306方案

1、設定 [[email protected] ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT [[email protected] ~]# /sbin/iptables -I INP

第二章 傳輸層:TCPUDP和SCTP(3)—

埠號被劃分為3段 1.  0~1023   這些埠由IANA分配和控制 2. 1024~49151  已登記的埠,這些埠不受IANA控制,不過由IANA登記並提供它們的使用情況清單 3.  49152~65535  動態或私用的埠。IANA不管這些埠,它們就是通常所稱的臨時

Day3 - Python基礎3 函數遞歸內置函數

輸出 proc 內存 roc -- python 一個 重復 spa 1.函數基本語法及特性 函數是什麽? 函數一詞來源於數學,但編程中的「函數」概念,與數學中的函數是有很大不同的,具體區別,我們後面會講,編程中的函數在英文中也有很多不同的叫法。在BASIC中叫做subro

vue.js基礎知識篇(3):計算屬性表單控件綁定

multi option || list text 知識 基礎 unset select標簽 第四章:計算屬性 為了避免過多的邏輯造成模板的臃腫不堪,可使用計算屬性來簡化邏輯。 1.什麽是計算屬性 <!DOCTYPE html><html lang="e

轉載---編寫高質量代碼:改善Java程序的151個建議(第3章:類對象及方法___建議47~51)

閱讀 aer 集中 記事本 哈希算法 讀者 堆內存 ref 類型判斷 閱讀目錄 建議47:在equals中使用getClass進行類型判斷 建議48:覆寫equals方法必須覆寫hashCode方法 建議49:推薦覆寫toString方法 建議50:使用package

轉載---編寫高質量代碼:改善Java程序的151個建議(第3章:類對象及方法___建議41~46)

equals 業務 父親 face 使用 訪問 his () 而是 閱讀目錄 建議41:讓多重繼承成為現實 建議42:讓工具類不可實例化 建議43:避免對象的淺拷貝 建議44:推薦使用序列化對象的拷貝 建議45:覆寫equals方法時不要識別不出自己 建議46:equ

Step3- Python基礎3 函數遞歸內置函數

方法 efi brush 內置 logs python 基本語法 內置函數 關鍵字 一、函數基本語法及特性 Python中函數的定義方法: def test(x): #定義函數的關鍵字,()內可定義形參 "The function definitions" #文檔

Python基礎3 函數遞歸內置函數

python 函數本節內容1. 函數基本語法及特性2. 參數與局部變量3. 返回值嵌套函數4.遞歸5.匿名函數6.函數式編程介紹7.高階函數8.內置函數溫故知新1. 集合主要作用: 去重關系測試, 交集\差集\並集\反向(對稱)差集>>> a = {1,2,3,4} >>>

4.標準體重: 男士體重=身高-100±3 女士體重=身高-110±3 輸入性別身高體重,查看體重是否標準

script amp 體重 == b- pro else if else scrip <script> a=prompt("請輸入性別“,”") b=prompt("請輸入身高“,”") c=prompt("請輸入體重”,“") x="女" y="男" d=b-

ubuntu centos debian環境下腳本一鍵自動開啟PPTPL2TP兩種VPN服務

ubuntu centos debian環境下腳本一鍵自動開啟pptp、l2tp兩種vpn服務 ubuntu centos debian環境下腳本一鍵自動開啟PPTP、L2TP兩種VPN服務親測可用http://blog.csdn.net/bahubali/article/

3. 接口多重接口

linq cti area circular 輸出 span parse main adl 接口、多重接口:   定義:接口是指定一組函數成員而不實現成員的引用類型,其他類型 —— 類和結構可以實現接口。 1 /** 2 * 一: 1)定義 ICalculate 接