0、概述websocket
(1) 個人總結:后臺設置了websocket地址,服務器開啟后等待有人去連接它。 一個客戶端一打開就去連接websocket地址,同時傳遞某些識別參數。這樣一來后臺和客戶端連接成功了,然后后臺就可以發消息給客戶端了,(客戶端也可以再回話給后臺)。
(2) socket叫套接字,應用程序用socket向網絡發出請求或者應答網絡請求。
(3) 官方解釋的socket 建立連接四步驟:
服務器端開啟socket,然后accep方法處于監聽狀態,等待客戶端的連接。
客戶端開啟,指定服務器名稱和端口號來請求連接服務器端的socket。
服務器端收到客戶端連接請求,返回連接確認。在服務器端,accept() 方法返回服務器上一個新的 socket 引用,該 socket 連接到客戶端的 socket。
客戶端收到連接確認,兩個人就連接好了,雙方開始通訊
(4)注意:
客戶端的輸出流連接到服務器端的輸入流,而客戶端的輸入流連接到服務器端的輸出流。
TCP 是一個雙向的通信協議,因此數據可以通過兩個數據流在同一時間發送.
1、app.js寫法
在app.js下添加三個函數openSocket(), closeSocket(),sendMessage(),在app初始化的onLunch函數里面調用openSocket(),這樣子用戶一進入小程序就會自動連接websocket
App({ globalData: { socketStatus: 'closed', }, onLaunch: function() { var that = this; if (that.globalData.socketStatus === 'closed') { that.openSocket(); } } openSocket() { //打開時的動作 wx.onSocketOpen(() => { console.log('WebSocket 已連接') this.globalData.socketStatus = 'connected'; this.sendMessage(); }) //斷開時的動作 wx.onSocketClose(() => { console.log('WebSocket 已斷開') this.globalData.socketStatus = 'closed' }) //報錯時的動作 wx.onSocketError(error => { console.error('socket error:', error) }) // 監聽服務器推送的消息 wx.onSocketMessage(message => { //把JSONStr轉為JSON message = message.data.replace(" ", ""); if (typeof message != 'object') { message = message.replace(//ufeff/g, ""); //重點 var jj = JSON.parse(message); message = jj; } console.log("【websocket監聽到消息】內容如下:"); console.log(message); }) // 打開信道 wx.connectSocket({ url: "ws://" + "localhost" + ":8888", }) }, //關閉信道 closeSocket() { if (this.globalData.socketStatus === 'connected') { wx.closeSocket({ success: () => { this.globalData.socketStatus = 'closed' } }) } }, //發送消息函數 sendMessage() { if (this.globalData.socketStatus === 'connected') { //自定義的發給后臺識別的參數 ,我這里發送的是name wx.sendSocketMessage({ data: "{/"name/":/"" + wx.getStorageSync('openid') + "/"}" }) } },})
新聞熱點
疑難解答