公司的oa是09年重金购买国内某知名oa公司的产品,因为是asp.net写的,我可以通过反编译查看很多源码(只有控制登录入口的地方作了加密),oa的即时通讯功能代码实现在应用层比较简单,就是每个客户端通过ajax轮询数据库,直接从数据库查询属于自己的未阅消息,然后弹出提示。而我写这类功能时,惯用方式是后台自动轮询数据库,每次查取数据库所有的未阅消息,然后放入缓存,客户端通过ajax轮询时从缓存中读取属于自己的消息,虽然我觉得自己的方法更好,但前一种作为一个知名、悠久、成熟的软件产品采用的方式,可能是有它的优势所在,优点是什么呢?还有什么更好的方式吗?
以上两种方案的话,从性能上来说,你的更好。相对,复杂一点点。要实现即时通讯这类的功能,一般采用长轮训,WebSocket(最佳,但是当年浏览器不够支持啊)等
当然是你的方法好。
你现在讨论是主动推,还是主动拉的问题,和什么什么系统没关系。
当然是主动推好,你推给一万个人,就只向外发了一万次消息而已(先不说是udp广播还是什么鬼的)。
人家拉你,一来一回至少就是2倍,2万次。
以前这种框架统称为comet。现在.net平台SignalR妥妥的
感觉不用缓存和用缓存没什么区别,用了缓存还是要轮训,性能差不多吧。 最好的方法用SignalR 推送功能
差别好大的,几十上百倍的差别好不好。
假设有1000个客户端浏览器,每一分钟访问一次数据库,一分钟就是1千次访问。
如果让缓存每一分钟访问一次数据库,客户端只需要在缓存中查找就可以了。
这样可以减轻数据库负担,将负担转移到应用服务器。
这个类似IPHONE或是ANDROID中的统一心跳机制。
每个APP心跳或者让系统统一进行心跳管理。
@爱编程的大叔: 受教了,感谢啊!