socket.io 是一款优秀的WebSocket框架,简单好用。只是文档很少,有很多技巧性用法需要自己摸索,这里我会陆续分享一些自己发现的使用技巧,欢迎大家讨论。
官方给的client端示例
let socket = io('http://localhost');
socket.on('news', data => {
console.log(data);
socket.emit('my other event', {my: 'data'});
});
server端示例
io.on('connection', socket => { // 每次断线重连都是新的对象
socket.emit('news', {hello: 'world'});
});
socket.io
可以自己处理断线重新连接,但是每次断线重连之后socket
都是新的对象。
假设有这样的场景:每次断线重连client
都要发送一些基础数据给server
,可行的做法是监控client端的connect
或者reconnect
事件,然后发送数据给server
。但是这样做有个两个弊端:第一,代码形式上不是“同步”的;第二,代码结构比较复杂,要写至少两个事件监听。
可以有个更简单的做法,这里拿token
做个举例:
client端
let socket = io('http://localhost/?token=900150983cd24fb0d6963f7d28e17f72');
server端
io.on('connection', socket => {
let {token} = socket.handshake.query; // 从这里可以取到client连接url的query
console.log('token');
});
如此做法,即可在建立连接同时拿到token,不需要另行发送数据进行沟通。