本人近来对WebQQ的实现尤为感兴趣,自己也想动手做一个类似的WebQQ,
即便功能简单些,能私聊,能群聊即可。
但是还有一些问题点没有想清楚,希望对方面有认识的高手多提点思路。问题点如下:
1、如果我打开与好友的聊天对话框,如何将信息发送出去(难道每发一条就Ajax一次?)
2、如何判断我有未读消息(QQ的做法是右下角有头像闪动,我该如何实现呢?)
3、如何实现信息的及时显示
4、如果每发一条信息就做一次Ajax请求的话,服务器负载一定会过重吧?
5、(补充中...)期待大家的回复
即便功能简单些,能私聊,能群聊即可。
但是还有一些问题点没有想清楚,希望对方面有认识的高手多提点思路。问题点如下:
1、如果我打开与好友的聊天对话框,如何将信息发送出去(难道每发一条就Ajax一次?)
2、如何判断我有未读消息(QQ的做法是右下角有头像闪动,我该如何实现呢?)
3、如何实现信息的及时显示
4、如果每发一条信息就做一次Ajax请求的话,服务器负载一定会过重吧?
5、(补充中...)期待大家的回复
不刷新,怎么获取服务端的最新数据?(别人给你发的消息)
B/S结构就这样,你当是C/S啊?
我的办法是:
function send(msg){
xmlHttp_1负责信息的即时显示
xmlHttp_2负责再线人数即时显示
setTimeout(function(){send(msg)},1000);
}
这个在ff上很灵,在ie上有问题,我是自学,不知这个写法是否有不合理的地方,也很想知道别人都是怎样做的,
webqq貌似用的serverpush,就是与服务器建立一定周期的长连接.服务端检查新消息,有消息时通知客户端.而不是客户端每隔一定时间去问服务端是否有新消息.从楼主问的这几个问题,觉得楼主还得多研究,多学习. 加油吧...期待你的作品.
给LZ一点提示吧其实聊天的内容不一定要放到数据库的,
你可以参考下 http://www.bufanlu.com/chat/
1,浏览器的polling机制,浏览器跑定时器去轮询服务器看是否有新的消息到来;
2,基于server的push机制,通过浏览器和服务器建立一个长链接,服务器发现有新消息,主动push到浏览器;
3,通过浏览器插件机制,扩展浏览器的功能,使得可以支持类似c/s的方式,服务器可以下发消息给浏览器;
但几个点比较重要:
1,信令和消息数据的分离实现,信令用一个bit来表示是否有消息,而消息数据比较大,进行轮询性能比较差,轮询是走信令通道,目的是信息量小和快,可以知道是否有消息到来,一旦有,用户点击的时候才去拉
具体的消息内容,并且可以一次拉几条数据;
2,消息的内容一般不存储db,而是用cache或者文件cache;
当初就因为服务器问题,差点把马化腾拖垮!
消息发出,聊天的人员要接收到信息,肯定会有服务器请求,所以要ajax一次。
2、如何判断我有未读消息(QQ的做法是右下角有头像闪动,我该如何实现呢?)
未读消息可以用一个隐藏的button,当有新的信息,或者是其他的(比如好友邀请),显示这个button,
当让要用ajax实现,实时的轮询。
3、如何实现信息的及时显示
ajax对象轮询,这个可以像楼上说的,不去检测信息,而是检测信令,确切的查看信息的时候再去ajax取数据。
4、如果每发一条信息就做一次Ajax请求的话,服务器负载一定会过重吧?
这个只能适当的处理,实时的聊天系统是必要的ajax请求,因为要和服务器做交互,聊天信息是从服务器传递的。
注: 以上的ajax轮询事件,每个事件创建不同的xmlHttpRequest 对象来做。
希望LZ的项目早日上线!