接上一篇文章的話題,我們這次來講一下如何建立一個基于node.js的WebSocket服務器,并在小程序中使用這個提供實時服務的服務器。 node.js中已經有很多現成的第三方庫,用于構建WebSocket服務。我們今天選用一個叫做w ...
接上一篇文章的話題,我們這次來講一下如何建立一個基于node.js的WebSocket服務器,并在小程序中使用這個提供實時服務的服務器。
node.js中已經有很多現成的第三方庫,用于構建WebSocket服務。我們今天選用一個叫做websocket的庫,來構建一個可以提供標準WebSocket接口的node.js服務端程序。
先建一個空文件夾,名叫ws-server,然后進入該文件夾,在命令行執行:
npm install websocket
然后在ws-server文件夾下,再新建一個名為app.js的文件,內容如下:
因為WebSocket服務是建立在HTTP之上的,所以我們看到,代碼中建立了一個http server, 然后建立了一個使用了該http server的WebSocket server,并讓http server監聽8080端口對外提供服務。
這個服務端的功能也很簡單,就是收到客戶端發送的消息并打印出來,然后再接收到的消息前面加上一個[from server]的前綴后,返回給客戶端。
好,我們來實現調用該服務的微信小程序代碼:
首先我們需要用wx.connectSocket()方法去連接目標服務器,因為我們開發環境用的是非安全的http,所以這邊的url參數是ws://打頭的,在以后微信的實際運行環境中,你的服務端必須使用SSL,所以連接url就會是wss://的了。
然后需要調用wx.onSocketOpen()方法來設置WebSocket連接打開時的回調函數。當連接打開后,就可以開始向服務端發送數據了,我們在這里使用wx.sendSocketMessage()方法,向服務端發送了一個后面跟隨一個隨機數的Hello,World字符串。我們運行一下程序,可以看到,服務端的控制臺上會打印出這樣的結果:
說明服務端已經成功接收到了客戶端發送的字符串消息。
之后服務端會向客戶端再反饋這個消息,那客戶端這邊如何接收這個從服務端過來的消息呢?我們可以在小程序中,使用wx.onSocketMessage()方法,監聽服務端發送到客戶端的消息,正如我們上面的示例代碼寫的那樣:
wx.onSocketMessage(function (msg) {
console.log(msg)
})
這里在,我們在小程序的Console上,簡單的打印了從服務端過來的消息,如下所示:
這樣,一個簡單但完整的客戶端和服務器端的WebSocket交互就完成了。如果你想關閉這個WebSocket連接,那么你可以調用wx.closeSocket()來進行關閉。
好了,關于微信小程序和WebSocket服務器通信的例子,就講到這里吧。不對之處,歡迎指正。