基于Node实现WebSocket通信
小程序中需要用到webSocket通信,为了方便自己调试,于是弄了个node环境来做测试。
一、客户端
webSocket客户端的使用还是蛮简单的,
var ws = new WebSocket('ws://127.0.0.1:3000');
ws.onopen = function() {
console.log('open');
}
ws.onmessage = function(data) {
console.log(data);
}
实例化WebSocket后,为实例绑定事件就可以了,当然还有其他的事件,我这就不列举了,只用open和message了。 下面看下node的代码。
二、socket.io
socket.io听过得比较早,但一直没有机会使用,于是第一个便想到他,npm install下。 增加后端代码,在不妨碍理解的基础上进行了代码删减:
const io = require('socket.io')();
io.on('connection', function(client) {
console.log('connected');
});
io.listen(3000);
powershell下用node启动该服务,同样的,用http-server工具启动,打开 http://127.0.0.1:8080/ws.html。
发现控制台下报错了,提示Connection closed before receiving a handshake response。
好吧,这儿被卡了好久,后来发现原因是websocket版本的问题,我们看下控制台的network,
发现websocket对应的是13版本,而socket.io支持的版本是4版本,故存在问题。而websocket版本详细可以查看:websocket版本。
有问题,怎么处理呢?继续看下一个ws库。
三、ws
ws是一个node的webSocket库,在readme中说明了他是支持13版本的websocket协议的。 直接上代码,启服务,
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 3000 });
wss.on('connection', function(ws) {
console.log('connected');
ws.on('message', function(message) {
console.log('received: %s', message);
});
ws.send('something');
});
刷新下ws.html,控制台上有打印了,这下可以使用了。
四、总结
讲完了,发现微信下没讲?不,微信下是一样的,微信的websocket也是13版本的,问题和处理方法都是一样的,没用微信的例子是因为想看下普通pc下的效果,发现一致的,就直接拿来当例子了。
demo下载地址:基于node实现websocket通信。