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規則開啟80、3306等埠
用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開啟 80、22、3306埠方案
1、設定 [[email protected] ~]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT [[email protected] ~]# /sbin/iptables -I INP
第二章 傳輸層:TCP、UDP和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環境下腳本一鍵自動開啟PPTP、L2TP兩種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 接