所以 Websocket 的本质是把前端的轮询放到后端了?

2017-03-27 23:24:16 +08:00
 gy134340

本来比较传统的实时查询数据库更新是在前端 ajax 来轮询,现在看了一下 socket.io 的实现 websocket 如果来做数据库变动监测还是要写 setTimeInterval() 之类的,所以 websocket 出来的意义就是为了节省每次重发 http 请求的带宽吗? 求大神指导如何实现 实时监测数据库字段的更新并发送给前端,难道真的要换 PostgreSQL 这样支持 listen/notify 的数据库?

8340 次点击
所在节点    问与答
33 条回复
misaka19000
2017-03-28 08:30:58 +08:00
楼主你需要读一下《 Unix 网络编程》
gy134340
2017-03-28 09:15:08 +08:00
@wwqgtxx OK ,假设是两个单独的应用,一个去录入数据到数据库,另一个只有对数据库读这样,两个后端的代码分开的
huijiewei
2017-03-28 09:17:28 +08:00
@gy134340 分开又怎样,已经跟你说了用消息队列了
morethansean
2017-03-28 09:21:41 +08:00
@gy134340 没有消息队列吗?很常见的情况啊。
wwqgtxx
2017-03-28 09:21:47 +08:00
@helloworld12 socket.io 同时支持长轮询, xhr 轮询, websocket 底层

@gy134340 消息队列呀,大家说了那么多遍,你都视而不见是吧,不要把目光局限在数据库中嘛
panlilu
2017-03-28 09:27:15 +08:00
不用消息队列的话,试试 rethinkdb?
gy134340
2017-03-28 09:35:21 +08:00
ok, 谢谢诸位老哥
z4none
2017-03-28 09:35:54 +08:00
对于你这个场景,就好比自己轮询拿快递和送快递上门的区别。试想多个前端轮询是什么情况。
WispZhan
2017-03-28 09:44:24 +08:00
Websocket 难道不是目的是让服务器推送更容易吗?话说为什么要轮询……
服务端可以根据数据变更的 Event 来主动向客户端发起 Push ,要么直接 push 变更数据,要么 push 一个更新请求然后让客户端自己查询。
qiayue
2017-03-28 09:44:30 +08:00
@gy134340 让录入数据的提供消息
hand515
2017-03-28 09:45:12 +08:00
简单使用 redis 的 pub/sub 就不用轮询了
aleen42
2017-03-28 21:21:46 +08:00
其实还是挺有用的,且不说实时监测数据库更新,我之前做的监听二维码扫描的简单需求,若用轮询可以发现服务器所需要处理的请求会非常之多,更何况当时是用的 PHP 做后端,压力可想而知。 web socket 长链接的方案就是为了解决诸如此类问题,因此不要轻视 HTTP 请求量的减少,这意义匪浅。
gy134340
2017-03-28 22:38:56 +08:00
@aleen42 本狗也是做这个,检测扫描二维码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350755

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX