那么基于上面两个问题,咱们要思考方向就是推的模式,这里使用时websocket,中心思想就是:有日志上报大屏就有网络请求,没有上报就老实一点,别发请求了,省省吧前端
那么对应websocket不太理解的同窗,能够考虑看下 WebSocket原理及如何使用 ,里面讲解的比较详细。web
上咱们的时序图:redis
说明:后端
Q:websocket为何要用ping/pong来维持?websocket
A:由于在本方案里面,ping/pong心跳用来肯定一个大屏是否打开的,由于咱们在后端计算大屏数据是跟咱们的条件来走的,若是咱们的大屏掉线了,可以及时通知后台任务,那么咱们的计算量会少不少网络
Q:用ping/pong就能百分百保证个人websocket不会断连吗?架构
A:答案是否认的,互联网上真没有百分百的事情,网络的一个抖动,咱们的ping/pong就有可能挂了,这是很正常的状况,咱们在业务上会对于ping/pong进行一些重试机制,这个重试可能会短期内的,好比1s内发起多少次请求的;若是这个请求不能正确获取数据,那么服务端过时后,其实这个token就没有太多用处了,前端就会有个定时器去探测websocket服务与本地通信是否有问题,没有问题进行从新的connect操做,而在探测过程当中,咱们有个降级操做,会将咱们websocket操做变成传统的拉模式,这个要结合咱们上一篇文件技术方案。app
Q:我条件确定会变动,变动证实作?socket
A:这是一个好问题,由于啥,切换大屏参数直接致使咱们不少模块数据是须要从新渲染的,那么咱们须要从新的发送push操做,而后后续逻辑是一致的。ide
Q:为何要用token的介入呢,我已经登入系统了,直接uid就能够不?
A:开始咱们也是考虑到uid的方案的,为何不行呢,主要是咱们这里的token是跟websocket相关的,能够近似的认为是socket里面的fd,好比我一我的开了10个大屏,那么我推送的那一刻,我须要将10个大屏数据都能推送到,而区别就在于,uid只有一个,token是10个
这里为何花了两个篇幅来写大屏这块呢,主要是在一些简单场景下,咱们1.0版本会更适合,毕竟websocket相对于流程复杂一点,那么中间节点处毛病地方就会多一点,可是复杂场景下面,又必需要这样作设计,因此咱们就分开两个文章来进行说明。
但愿经过两篇文章,同窗们可以从中学习到大屏制做技术方案的相关知识点,可以让咱们应对产品经理 完(刁)美(钻)需求时候,咱们有一个很是合适的技术方案输出。