本文編輯: Flyinthesky瀏覽 5642
版權所有,嚴禁轉載
接口 | 說明 |
---|---|
wx.connectSocket(OBJECT) | 創建一個 WebSocket 連接。 |
wx.closeSocket() | 關閉WebSocket連接。 |
接口 | 說明 |
---|---|
wx.onSocketOpen(CALLBACK) | 監聽WebSocket連接打開事件。 |
wx.onSocketError(CALLBACK) | 監聽WebSocket錯誤。 |
wx.onSocketMessage(CALLBACK) | 監聽WebSocket接受到服務器的消息事件。 |
wx.onSocketClose(CALLBACK) | 監聽WebSocket關閉。 |
接口 | 說明 |
---|---|
wx.sendSocketMessage(OBJECT) | 通過 WebSocket 連接發送數據,需要先 wx.connectSocket ,并在wx.onSocketOpen 回調之后才能發送。 |
wx.connectSocket(OBJECT)
創建一個 WebSocket 連接;一個微信小程序同時只能有一個 WebSocket 連接,如果當前已存在一個 WebSocket 連接,會自動關閉該連接,并重新創建一個 WebSocket 連接。
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
url | String | 是 | 開發者服務器接口地址,必須是 wss 協議,且域名必須是后臺配置的合法域名 |
data | Object | 否 | 請求的數據 |
header | Object | 否 | HTTP Header , header 中不能設置 Referer |
method | String | 否 | 默認是GET,有效值為: OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT |
success | Function | 否 | 接口調用成功的回調函數 |
fail | Function | 否 | 接口調用失敗的回調函數 |
complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
wx.connectSocket({
url: 'test.php',
data:{
x: '',
y: ''
},
header:{
'content-type': 'application/json'
},
method:"GET"
})
引申:WSS、SSL 和 https 之間的關系
SSL:
SSL(Secure Socket Layer,安全套接層) 簡單來說是一種加密技術, 通過它, 我們可以在通信的雙方上建立一個安全的通信鏈路, 因此數據交互的雙方可以安全地通信, 而不需要擔心數據被竊取。
WSS:
WSS 是 Web Socket Secure 的簡稱, 它是 WebSocket 的加密版本. 我們知道 WebSocket 中的數據是不加密的, 但是不加密的數據很容易被別有用心的人竊取, 因此為了保護數據安全, 人們將 WebSocket 與 SSL 結合, 實現了安全的 WebSocket 通信, 即 WebSocket Secure.所以說 WSS 是使用 SSL 進行加密了的 WebSocket 通信技術。
HTTPS:
其實 HTTPS 和 WSS 類似, HTTP 之于 HTTPS 就像 WebSocket 之于 WebSocket Secure.HTTP 協議本身也是明文傳輸, 因此為了數據的安全性, 人們利用 SSL 作為加密通道, 在 SSL 之上傳遞 HTTP 數據, 因此 SSL 加密通道上運行的 HTTP 協議就被稱為 HTTPS 了。
總結:
SSL 是基礎, 在 SSL 上運行 WebSocket 協議就是 WSS; 在 SSL 上運行 HTTP 協議就是 HTTPS。
wx.onSocketOpen(CALLBACK)
監聽WebSocket連接打開事件。
示例代碼:
wx.connectSocket({
url: 'test.php'
})
wx.onSocketOpen(function(res) {
console.log('WebSocket連接已打開!')
})
wx.onSocketError(CALLBACK)
監聽WebSocket錯誤。
示例代碼:
wx.connectSocket({
url: 'test.php'
})
wx.onSocketOpen(function(res){
console.log('WebSocket連接已打開!')
})
wx.onSocketError(function(res){
console.log('WebSocket連接打開失敗,請檢查!')
})
wx.onSocketMessage(CALLBACK)
CALLBACK返回參數:
參數 | 類型 | 說明 |
---|---|---|
data | String/ArrayBuffer | 服務器返回的消息 |
示例代碼:
wx.connectSocket({
url: 'test.php'
})
wx.onSocketMessage(function(res) {
console.log('收到服務器內容:' + res.data)
})
wx.onSocketClose(CALLBACK)
監聽WebSocket關閉。
示例代碼:
wx.connectSocket({
url: 'test.php'
})
//注意這里有時序問題,
//如果 wx.connectSocket 還沒回調 wx.onSocketOpen,而先調用 wx.closeSocket,那么就做不到關閉 WebSocket 的目的。
//必須在 WebSocket 打開期間調用 wx.closeSocket 才能關閉。
wx.onSocketOpen(function() {
wx.closeSocket()
})
wx.onSocketClose(function(res) {
console.log('WebSocket 已關閉!')
})
wx.sendSocketMessage(OBJECT)
通過 WebSocket 連接發送數據,需要先 wx.connectSocket
,并在 wx.onSocketOpen
回調之后才能發送。
參數 | 類型 | 必填 | 說明 |
---|---|---|---|
data | Object | 否 | 請求的數據 |
success | Function | 否 | 接口調用成功的回調函數 |
fail | Function | 否 | 接口調用失敗的回調函數 |
complete | Function | 否 | 接口調用結束的回調函數(調用成功、失敗都會執行) |
示例代碼:
var socketOpen = false
var socketMsgQueue = []
wx.connectSocket({
url: 'test.php'
})
wx.onSocketOpen(function(res) {
socketOpen = true
for (var i = 0; i < socketMsgQueue.length; i++){
sendSocketMessage(socketMsgQueue[i])
}
socketMsgQueue = []
})
function sendSocketMessage(msg) {
if (socketOpen) {
wx.sendSocketMessage({
data:msg
})
} else {
socketMsgQueue.push(msg)
}
}
1、tip: createSocket 鏈接默認和最大超時時間都是 60s
2、tip: 網絡請求的 referer 是不可以設置的,格式固定為 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 為小程序的 appid,{version} 為小程序的版本號,版本號為 0 表示為開發版。