构建网页远程控制服务

需求场景

我们做的大屏项目,需要在客户过来参观的时候进行演示,而演示的时候肯定不能用鼠标键盘去操作大屏,这样显得太low了。理想的情况是通过手机或者ipad进行远程控制。因此需要我们实现web远程通信的功能。

HTTP轮询版本

由于项目时间很紧张,所以我们第一版直接采用前端定时发送http请求轮询后端接口的方式来实现。

数据存储在redis中,以页面ID作为key。

逻辑说明

一图说明

代码实现

这里用NodeJS作为编程语言:

多服务端的数据通知问题

信号是存储在redis集群中的,我们线上有多个docker实例,如果dockerA读取了redis的信号,然后push给了连接到A的这些websocket客户端,然后清理掉了redis中的信号;此时如果有客户端连接到了dockerB,则这些客户端就不会收到通知了。

Nginx端口转发

https://www.jianshu.com/p/8837a22003bd

性能测试

之前用Java编写websocket服务的时候,做过一次测试,详见之前的文章《用jmeter对websocket应用进行性能测试》。