数据实时读取, 这里 我使用的是WebSocket
,虽然最后解决了问题,但是心里一直在担忧
因为在这里进行数据读取的时候,用了个死循环
昨天在群聊的时候, 有大佬叫我可以使用 signaIR(但是恐怕这里也需要定时去读取数据, 也会用到死循环一直去获取数据吧).
后面有大佬说,直接把这个功能封装成job( 这样的话, 还不是用了个死循环....)
想问一下,各位大佬们,这个地方的实现方式?(主要就是 感觉自己对死循环不放心... 然后又不知道其他的解决方案)
或者说我这里是还没有理解 数据实时读取显示的真谛
想要一个好的解决方案,最关键的一点是需求尽可能清楚,明白。
对, 因为我们获取到数据,插入到数据库这已经就产生了耗时间, 刚开始使用ajax 定时获取,只不过频率太长,造成了数据差异大了, 然后修改了定时请求频率, 现在就接近1s 去请求, 但是就造成了页面卡顿,资源占用高了(有些请求还会失败掉)
最后选择 WebSocket (这里把前端请求放在了后面,只不过用了循环去定时读取数据了)
听您这么说 本质都要用到 循环
那我就这样了, 实在不行, 就在 插入数据库的时候顺便做一个 推送操作
@Cgrain:
实在不行, 就在 插入数据库的时候顺便做一个 推送操作
就算是这样的解决方案也好过你循环读取数据100倍。
想想为啥,我先不说。
要不死循实时读,要不发布订阅循环发,死循环没啥问题啊,你担心啥呢?循环内出问题卡住吗。。。
没有 ,就感觉这里一点不正常(对死循环有点恐惧), 但是又没有想到什么办法, 所以想问下各位大佬,听听各位大佬的想法,或者思路
第一种是使用定时轮询 去查, 不过一般也并不是用死循环, 而是在上一方法执行结束后再间隔多少时间后重复执行方法。
第二种是使用WebSocket 做一个监听等待, 接受到信号在去执行。
性能在第二种好一些,兼容性 第一种好。
WebSocket 死循环是咋用的?
– 。淑女范erり 4年前@。淑女范erり: 死循环去读数据库....
– Cgrain 4年前@。淑女范erり: 然后把数据返回前台...
– Cgrain 4年前@Cgrain: 和前台部分应该没啥问题,死循环读数据库不太合适。。。插入数据库的模块,不能和读数据库的模块有个交互吗。最好是让这两个模块有个通知机制,死循环有点浪费资源。。
– 。淑女范erり 4年前@。淑女范erり: 其实按理来说,这个地方最好这样,数据插入数据库的时候也顺便把数据推送出去, 当这里 以前 是 用ajax 定时去数据库请求的,经常造成页面卡顿,然后资源占用过高,现在在一步步优化,然后现在的优化方案是转换为 使用WebSocket 去后台循环请求+推送的 ,现在 我也没什么太好的办法,所以才采取的这个方法
– Cgrain 4年前@。淑女范erり: 而且,我这里把它封装成服务了....
– Cgrain 4年前@Cgrain: 至少比以前ajax定时轮询好多了 😄 不过你说的
– 。淑女范erり 4年前这个地方最好这样,数据插入数据库的时候也顺便把数据推送出去
实现起来有问题吗,这种方式是最合理的。@。淑女范erり: 数据插入这一块的模块比较单一,都是获取数据,然后插入数据库的, 我这样的话,不是破坏了原有结构嘛?
– Cgrain 4年前后面实际上还是使用了 WebSocket QwQ
@。淑女范erり: 大佬下来冒个泡
– Cgrain 4年前