Express + Express-ws 实时通信

发布时间:2021-10-29 作者:yaming042 阅读量:- 本文字数:3.9k 阅读时长 ≈ 4 分钟

项目开发中时常会遇到多人协作的问题,比如多人同时编辑一片稿子,或同时修改一个东西,后一个人的保存始终会覆盖之前的数据,面对这种情况,我想到的办法有俩:

  1. 锁 + 超时解锁,当A在编辑的时候就禁止其他人编辑,如果A在一定时间内没有动作,那么就自动解开A的锁,其他人B就可以编辑
  2. 实时通信,当A在编辑的时候,实时告知其他人,此时A正在编辑

方案1,需要后端进行配合,比如新增lock等字段,表明当前是锁着的还是没有锁着的,而且还需要指定接口来锁定/解锁;前端需要控制超时逻辑(感觉利用cookie比较好,因为cookie可以设置生命周期),而且每次都需要将超时时间重新更新;如果一个项目刚开始,我感觉还是可以用这种方案的,项目开始就规划好,勉强还是可以用的。

方案2,我认为是主流,但也需要后端配合,不过还是很简单的
今天简单记录下express + express-ws的实时通信,首先使用express-ws的大体逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// app.js
var express = require('express');
var expressWs = require('express-ws');

...

var app = express();
expressWs(app);

app.ws('/echo', function(ws, req) {
ws.on('message', function(msg) {
ws.send(msg);
})
ws.on('close', function(){
console.log('closed')
})
ws.on('error', function(msg){
console.log('error')
})
})

// bin/www.js
...
server.listen(port);
...
// 下面这个很重要,否则即是上面都正确,websocket也无法成功链接
require('express-ws')(app, server)
...