以下內(nèi)容轉(zhuǎn)自nodejs快速實(shí)現(xiàn)微信小程序的websocket服務(wù)端,為便于讀者閱讀、學(xué)習(xí),有部分刪改。
正文——
微信小程序?qū)Φ谌椒?wù)端的網(wǎng)絡(luò)通信方式支持https和Websocket。WebSocket是HTML5開(kāi)始提供的一種在單個(gè) TCP 連接上進(jìn)行全雙工通訊的協(xié)議。為了解決HTTP協(xié)議效率低下的問(wèn)題,HTML5定義了WebSocket協(xié)議,能更好的節(jié)省服務(wù)器資源和帶寬并達(dá)到實(shí)時(shí)通訊。WebSocket在數(shù)據(jù)傳輸?shù)姆€(wěn)定性和數(shù)據(jù)傳輸量的大小方面,具有很大的性能優(yōu)勢(shì)。有不少公司將nodejs的http://socket.io作為websocket的解決方案,很遺憾的是http://socket.io是對(duì)websocket的封裝,并不支持html5原始的websocket協(xié)議。node有很多websocket庫(kù),ws就是其中一個(gè),號(hào)稱最輕量級(jí),最快。ws的用法比較簡(jiǎn)單。
要使用ssl,首先你得有ssl證書(shū),自己生成的不能用于外網(wǎng)部署,建議去騰訊云、或七牛云存儲(chǔ)申請(qǐng)一個(gè)免費(fèi)的。
1,新建ws后端工程文件
首選需要安裝node,參見(jiàn):https://nodejs.org/en/download/
接者安裝ws,一條指令搞定(以后所有的源碼,類庫(kù)都應(yīng)該是這個(gè)樣子的):
新建一個(gè)main.js
var fs = require('fs');
var httpServ = require('https');
var WebSocketServer = require('ws').Server;
var app = httpServ.createServer({
key: fs.readFileSync('ssl.key'),
cert: fs.readFileSync('ssl.crt')
})
app.listen(8000,function() {
console.log('server started.')
});
var wss = new WebSocketServer({
server: app
});
wss.on('connection', function(wsConnect) {
wsConnect.on('message', function(message) {
console.log("received ",message);
wsConnect.send('reply');
});
});
其中,ssl.key與ssl,crt是我的證書(shū)文件,需要換成自己的。啟動(dòng)端口是8000。在終端里執(zhí)行:
如果看到"server started",證明啟動(dòng)成功了。
2,本機(jī)瀏覽器測(cè)試
打開(kāi)chrome調(diào)試窗口,輸入:
var socket = new WebSocket('wss://www.rixingyike.com:8000/');
socket.send('message');
如果在后臺(tái)的終端看到"received message"的輸出,證明ws后端已經(jīng)啟動(dòng)成功了。
在這里www.rixingyike.com是與我的ssl證書(shū)文件匹配的域名,大家要換成自己的。另外,為了本機(jī)測(cè)試方便。可以在/etc/hosts里,將www.rixingyike.com指向127.0.0.1。
3,在小程序中連接
在隨意一個(gè)小程序js文件中輸入以下函數(shù)并執(zhí)行:
testWss(){
wx.connectSocket({
url: 'wss://www.rixingyike.com:8000/'
})
wx.onSocketOpen(function (res) {
console.log('WebSocket連接已打開(kāi)!')
})
wx.onSocketOpen(function (res) {
wx.sendSocketMessage({
data: "weapp message"
})
})
wx.onSocketMessage(function (res) {
console.log('小程序收到服務(wù)器消息:' + res.data)
})
}
保存,運(yùn)行。正常的話,就能在后臺(tái)終端看到"received weapp message"的打印。另外,在小程序啟動(dòng)時(shí),會(huì)收到一個(gè)“replay”的打印消息。