最近有做一个项目,需要在前台每三秒检查一次数据库里面,固定的那张表某个列发生变化的时候检测得到并返回一个结果。
例如:数据库Test 中,有张表Test1 。
表里面有
名称 年龄 性别 三列数据
张三 10 男
李四 12 男
王五 13 女
我这边客户端显示这个表的数据,当别人在其他界面更改这个表里面的值的时候(例如:把张三的年龄改为了11岁)。我能在我这边能够获取到数据库的数值发生了变化,并返回一个值回来,然后我刷新我的界面获取到最新的值,实现实时刷新的功能。请问有什么办法能够检测到数据库的值发生变化,并给前台返回一个值的呢?
a client:
ajax({张三,10岁})
a server:
get db. if(11岁==10岁)
return 更改后的数据
这个最简单。
高大上的那些玩意看情况用,比较websocket,eventbus
这种对比的方法我有想过,但是我还是想考虑下更好的方法,您说的websocket,eventbus我现在在了解,谢谢啦
@打了个字: 不要过渡考虑就好。
无非就是前端页面订阅当前页面上数据的id。
修改端,修改之后发送一个消息或者触发一下订阅。
订阅判断数据是否更改用websocket通知到前端页面
@calvinK: 我有做类似于这订阅的功能,另外加了一列,例如 0,1 有数值发生变化的时候,数值发生变化的时候 0变成1 ,在获取到前端检测这个0,1 当 0变成1 的时候,重新获取数据库的值,并将1改为0。但是我担心会触发一个问题,当几个这个界面时间发生1-2秒的交错的时候,快的界面获取到了这个变化,并将数值变为了0 ,但是慢的一方没有获取到值的变化,没有及时检测到数据发生了变化的问题,虽然这不是个大问题。但是还是想请问下有没有更好点的办法。
@打了个字:
当几个这个界面还带编辑功能么,还是什么意思。
单纯展示最终都会显示当前值呀
@calvinK: 有展示,并且可以在这个界面修改这个值,修改的时候会触发一次重新获取的Ajax
@打了个字:
修改前,可以主动ajax获取一下当前数据
修改中,数据被改变。这属于并发,修改的时候可以带上版本号。
@calvinK: 我用刷新办法做了个刷新按钮,目前只能这么解决了。这个不能搞得太复杂了,感谢您的解答,谢谢!
前台用setinterval每隔3秒调用ajax请求数据
我的想法是每十秒固定调用一次,另外的时间只是检查数据发生变化没,减轻负担
其实就是固定频次,发送请求,带上页面的值a,与数据库的值b比较,返回比较结果
这种方法我有考虑到,但是我想找到一个更好的办法
数据库加一个rowversion时间戳, 固定时间去比较时间戳就可以了 不一致 返回新数据更新页面就可以了
NET高级QQ群:479601208 --欢迎大家加入讨论技术
这个 rowversion是怎么用的?
@打了个字: 其实就是一个unix时间戳 新建一个字段RowVersion 字段类型为timespan z这个字段数据库会自己维护,不管插入还是更新 数据都会更新这个时间戳, 所以 你比较的时候就用当前数据的RowVersion 和数据库这条数据的RowVersion来比较 如果不一致 就说明数据这条数据已经发生了变化
@123!: 恩 好的我大概知道是什么意思,这个方法很不错。 感谢您的解答!