做一个类似腾讯web qq聊天中的几点技术讨论

分类:应用接口| 发布:camnprbubuol| 查看: | 发表时间:2011/6/14

一.关于定时存取数据的问题:

1,客户端,首先要考虑的是如何不断获取数据,采用的技术和封包格式
方式1,用ajax定时获取,即使每秒读取一次,有些人可能会觉得服务负载过重,但我告诉你,绝对没有问题,知道显示一个普通网页(如csdn主页)对服务器会发生多少次请求吗?这个数值在60次以上,相当于1分钟刷新一次csdn主页,如果你对封包格式再优化下,不会存在性能问题
方式2,采用push技术,也就是所谓的Comet长连接,我们知道,在http1.1标准中,支持Keep-Alive功能,使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,避免了建立或者重新建立连接,具体做法是在web窗口中嵌入一个iframe,该iframe与服务器保持长连接,当服务器有新的消息时,不断push给客户端,google的gamil和gtalk就是使用这种技术,这种方式在IE中会有点问题,会显示页面一直未加载完成,具体的解决访求可以上google 搜索一下htmlfile
方式3,使用socket,这种方式需要第三方插件支持,比如applet,silvelight,flash/flex,applet不支持update html控件,所以就别想了,flash/flex倒是非常容易实现,它支持socket和xmlsocket,但受到安全沙箱限制,需要在服务器上额外配置策略文件

消息的获取需要注意的是不要一条消息获取一次,而是一次获取发送给该用户的所有消息

2,服务端
服务端需要考虑的是存储策略和更新方式,应避免每一次消息都立刻存库,因为一次数据库连接的开销是非常大的,可使用缓存,但不是net Cache这样的,到时就恐怕无法进行升级和维护(比如重启),可以使用比如MemcachedVelocity。Memcached已经有大量的应用,如facebook,Velocity是微软的产品,纯.net开发的,在.net framework 4版本中自带了,但需windows 2008支持,呵呵,有点说远了, 在更新到数据库一般有两种方法,一种是定时更新,这种好理解,一种是定量更新,就是当数据量达到设定的值时才更新

至于闪动和声音控制,用silvelight或flash就很好处理,特别是声音控制,当播放时要进行预加载,确保声音文件已下载到客户端,当有多个消息时应该有播放间隔控制,避免重音。如果用js,就我所知,无法实现这些细节,如果有高手知道,也请分享一下

Comet:基于 HTTP 长连接的“服务器推”技术

365据说看到好文章不转的人,服务器容易宕机
原创文章如转载,请注明:转载自郑州网建-前端开发 http://camnpr.com/
本文链接:http://camnpr.com/api/338.html

相关文章