<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head><meta forua="true" http-equiv="Cache-Control" content="max-age=0" /></head>
<card title="做一个类似腾讯web qq聊天中的几点技术讨论" id="card1">
<p> 游客</p><p>
标题:做一个类似腾讯web qq聊天中的几点技术讨论<br/>
正文:<br/>
一.关于定时存取数据的问题：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这样的，到时就恐怕无法进行升级和维护（比如重启），可以使用比如Memcached，Velocity。Memcached已经有大量的应用，如facebook，Velocity是微软的产品，纯.net开发的，在.net framework 4版本中自带了，但需windows 2008支持，呵呵，有点说远了， 在更新到数据库一般有两种方法，一种是定时更新，这种好理解，一种是定量更新，就是当数据量达到设定的值时才更新至于闪动和声音控制，用silvelight或flash就很好处理，特别是声音控制，当播放时要进行预加载，确保声音文件已下载到客户端，当有多个消息时应该有播放间隔控制，避免重音。如果用js，就我所知，无<br/><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=338&amp;Page=1">[&lt;&lt;]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=338&amp;Page=1">[[1]]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=338&amp;Page=2">[2]</a><a href="http://camnpr.com/wap.asp?mode=WAP&amp;act=View&amp;id=338&amp;Page=2">[&gt;&gt;]</a><br/>
<br/>
<a href="wap.asp?act=Com&amp;id=338">查看评论(0)</a><br/>
<a href="wap.asp?act=AddCom&amp;inpId=338">发表评论</a><br/><br/>

<br/>

<br/>
<a href="http://camnpr.com/wap.asp">首页</a>
</p>
</card>
</wml>