首页 新闻 搜索 专区 学院

关于消息系统,哪种方式更高效?

0
悬赏园豆:20 [已解决问题] 解决于 2015-09-15 18:12

公司的oa是09年重金购买国内某知名oa公司的产品,因为是asp.net写的,我可以通过反编译查看很多源码(只有控制登录入口的地方作了加密),oa的即时通讯功能代码实现在应用层比较简单,就是每个客户端通过ajax轮询数据库,直接从数据库查询属于自己的未阅消息,然后弹出提示。而我写这类功能时,惯用方式是后台自动轮询数据库,每次查取数据库所有的未阅消息,然后放入缓存,客户端通过ajax轮询时从缓存中读取属于自己的消息,虽然我觉得自己的方法更好,但前一种作为一个知名、悠久、成熟的软件产品采用的方式,可能是有它的优势所在,优点是什么呢?还有什么更好的方式吗?

lindping的主页 lindping | 初学一级 | 园豆:6
提问于:2015-03-03 09:23
< >
分享
最佳答案
0

以上两种方案的话,从性能上来说,你的更好。相对,复杂一点点。要实现即时通讯这类的功能,一般采用长轮训,WebSocket(最佳,但是当年浏览器不够支持啊)等

收获园豆:8
幻天芒 | 高人七级 |园豆:36662 | 2015-03-03 10:32
其他回答(3)
0

当然是你的方法好。

收获园豆:5
爱编程的大叔 | 园豆:30753 (高人七级) | 2015-03-03 09:28
0

你现在讨论是主动推,还是主动拉的问题,和什么什么系统没关系。

当然是主动推好,你推给一万个人,就只向外发了一万次消息而已(先不说是udp广播还是什么鬼的)。

人家拉你,一来一回至少就是2倍,2万次。

以前这种框架统称为comet。现在.net平台SignalR妥妥的

收获园豆:2
arg | 园豆:1047 (小虾三级) | 2015-03-03 13:58
0

感觉不用缓存和用缓存没什么区别,用了缓存还是要轮训,性能差不多吧。 最好的方法用SignalR 推送功能

收获园豆:5
lichao8872 | 园豆:230 (菜鸟二级) | 2015-03-03 16:52

差别好大的,几十上百倍的差别好不好。

假设有1000个客户端浏览器,每一分钟访问一次数据库,一分钟就是1千次访问。

如果让缓存每一分钟访问一次数据库,客户端只需要在缓存中查找就可以了。

这样可以减轻数据库负担,将负担转移到应用服务器。

 

这个类似IPHONE或是ANDROID中的统一心跳机制。

每个APP心跳或者让系统统一进行心跳管理。

支持(0) 反对(0) 爱编程的大叔 | 园豆:30753 (高人七级) | 2015-03-04 12:11

@爱编程的大叔: 受教了,感谢啊!

支持(0) 反对(0) lichao8872 | 园豆:230 (菜鸟二级) | 2015-03-04 13:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册