需求對話
提問
我在本地web能夠使用ws協議去鏈接websocket,但是小程序不能使用。
回答
由於小程序使用的是SSL加密協議,所以需要使用wss。這里wss與ws的關系就相當於https於http的關系。
提問
我用的是寶塔Linux,SSL好申請,但是wss我就不會配置了。
回答
對的寶塔Linux申請SSL很簡單,一鍵申請,相對https實現就很簡單了。那我們開始做配置吧。但前提你需要保證以下的幾個必備條件。
前提必備:
- 需要先為你的websocket域名申請SSL
- 寶塔Linux(非寶塔其實一樣能用,但是我這里的教程主要針對寶塔Linux做的)
Nginx代理WSS
這一步主要用來實現wss轉ws(即轉到http)
打開管理后台,點開“網站”
->“相應的域名”->“配置文件”
(我糊的地方只是我的域名和ip信息,不是重要信息,不用在意)
搜索#SSL-END
,在這串注釋后面加上以下代碼,圖上我已經加上了,所以和你的肯定不一樣
#wss協議轉發 小程序里面要訪問的鏈接
# 訪問:wss://xxxx.com/wss
location /wss {
proxy_pass http://host:8080;#代理到上面的地址去,
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
關於以上的配置我必須要說清楚,proxy_pass http://host:8080
后面的地址加端口是你websocket的地址,這里必須加上端口,例如:http://baidu.com:8080
,這里需要手動改的就是這一個地方。
先別關閉這個窗口,接下來還有
接下來把鼠標移到最頂端,也就是server
上面添加以下代碼,一樣的道理,我這里已經添加了,所以和你的不一樣,以你的為准
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server ip:8080; #這里可以是多個服務端IP(分多行),設置權重就可以實現負載均衡了
}
這里需要手動設置一下,就是在upstream websocket
里面有一個ip:8080。這個ip請替換成你的IP,IP在什么地方可以看到呢,看你寶塔linux左上角就有了,對就是那個。例如:server 114.114.114.114:8080
至此Nginx代理wss就算全部ok。請注意我用的socket端口是8080,如果你的端口被占用,請你更改,當然如果改了請把一系列的都改了
小程序websocket使用
官方文檔: https://developers.weixin.qq....
我這里只是做連接測試。只是一個Demo
miniWebsocket:function(){
wx.connectSocket({
url: 'wss://host/wss',
//這里只需要填寫你開始配置的域名就好,但是請在域名后面添加一個/wss。例如:wss://baidu.com/wss
})
wx.onSocketOpen(function(res){
console.log(res)
console.log('打開成功')
})
wx.onSocketMessage(function(res){
console.log('收到服務器信息'+JSON.stringify(res))
})
wx.onSocketOpen(function (res) {
console.log('WebSocket連接已打開!')
console.log('數據發送')
wx.sendSocketMessage({
data: 'ekeylee'
})
})
}
上圖就是我已經配置好小程序的返回信息,如果有什么地方寫的不是很清楚,請文末留言,感謝
本文轉載於:猿2048→https://www.mk2048.com/blog/blog.php?id=hicch2kjaab