主题:  一个即时通讯的问题,值得讨论一下

沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#12004/12/6 2:08:12
不知道以前有没有人讨论过,我还是想试一下。
象QQ和MSN一样,用户登陆后,在状态栏右下角弹出一个信息,自己刚试了一下,但是只有本机可以看得到,而且对浏览器的版本有所要求。如何能让所有在线的人都能看得到,请大家一下高见。


难人一个……

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#22004/12/6 2:27:19
QQ并不是WEB页面,而是WINDOWS应用程序。WEB上的服务端程序无法做到把新的消息反馈到每个页面上,可能中能依靠js,隔时刷新页面,去取回服务器中新的数据。
我还不知道不依靠刷新,就能取回数据的方法,如果有,我也很想知道。
WINDOWS程序编程就相对灵活,就WINDOWS程序本身是以本机为主的,可以随时取回服务器中的数据,但大部分操作在本机,如果与服务器程序接在一起,服务程序可以触发客户端的事件,这是WEB程序难以做到的。


非常大鱼

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#32004/12/6 8:54:53
服务器不会主动发送消息给客户端,肯定是需要客户端去请求的.这个是大前提.



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#42004/12/6 9:01:35
客户端的请求是肯定的,问题是如何将信息反馈给所有在线的客户端,我用了一下JS,但只有本机的可以看得以,这是个难题。


难人一个……

缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#52004/12/6 9:11:38
客户端去请求应该没有什么难度了吧,服务器只是记录一下人员变动.然后客户端全部提取出来而已



蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#62004/12/6 9:20:49
Windows程序通信是依靠消息,主客服机之间也是依靠消息通讯的。客户机可以依靠请求,但也可以得到服务器发送的消息。请求是主动的,但不时的请求,比如几秒种请求一次可能会对服务器造成压力。消息是通过等待,服务器中请的变化将会产生消息队列,而客户机在等待中也会得到消息通知,这样就可以请求服务器了。消息可以减轻服务器压力,因在等待这段时间不会对服务器有压力的。
ASPNET对消息处理就没WINDOWS强了,因ASPNET程序主要是依赖浏览器,客户端是服务端产生的代码,程序只能是JS了,而JS并不能处理低层的消息,ASPNET程序是能过请求服务器产生客户端网页的。


非常大鱼

沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#72004/12/6 13:55:13
allinhands在上个帖子中说
引用:
客户端去请求应该没有什么难度了吧,服务器只是记录一下人员变动.然后客户端全部提取出来而已

问题是如何从所有的客户端提取出来,有没有什么好的方法?


难人一个……

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#82004/12/6 14:07:59
从右下角弹出提示框应该是可行的,要在多浏览器上运行,就取决于JS水平和经验了。

客户端获取这些信息,可以通过一个不可见的iframe,或xmlhttp来与服务器通信



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#92004/12/6 14:11:14
arhui在上个帖子中说
引用:
allinhands在上个帖子中说
引用:
客户端去请求应该没有什么难度了吧,服务器只是记录一下人员变动.然后客户端全部提取出来而已

问题是如何从所有的客户端提取出来,有没有什么好的方法?



是从服务器读取
每次登陆和退出服务器做一下记录
然后当客户端来请求数据的时候那这些记录交给客户端,然后在客户端作出提示



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#102004/12/6 15:44:09
JS昨天试了一下,我只可以看见我自己登陆的信息,但是别人却看不到。

好象有点了感觉,是否把客户登陆和退出的信息保存在APPLICATION,当有人新登陆的时候,就弹出那个提示。

编辑历史:[此帖最近一次被 arhui 编辑过(编辑时间:2004-12-06 15:51:35)]

难人一个……

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#112004/12/6 15:56:41
这只是个缓存问题,事实上从数据库读取速度也很快。

个人感觉在 Web 页上实现做 IM 很勉强,即使达到了基本功能,交互方面也很难给人以愉快的体验。如果有兴趣的话,可以研究一下 MSN Messenger 的 Web 版本:
webmessenger.msn.com/



缺缺

职务:管理员
等级:8
金币:41.0
发贴:9620
#122004/12/6 16:14:48
arhui在上个帖子中说
引用:
JS昨天试了一下,我只可以看见我自己登陆的信息,但是别人却看不到。



你老在反复说这个
你应该想的是怎么得到所有用户的上下线的信息



沉默是金

职务:普通成员
等级:6
金币:11.2
发贴:4357
#132004/12/6 16:17:10
用户上,下线的信息可以得到,现在只是一个方法的问题,还在不断的测试中,郁闷一下


难人一个……

蓝鲸

职务:版主
等级:5
金币:42.1
发贴:2614
#142004/12/6 23:45:09
janlay在上个帖子中说
引用:
这只是个缓存问题,事实上从数据库读取速度也很快。

个人感觉在 Web 页上实现做 IM 很勉强,即使达到了基本功能,交互方面也很难给人以愉快的体验。如果有兴趣的话,可以研究一下 MSN Messenger 的 Web 版本:
webmessenger.msn.com/


好象速度不如Windows版的Messenger,不过也不失为一种方法研究一下。
这方面我没试过,用iframe的话是否用JS不断刷新隐藏页面。我觉得陷藏页面可以用一个文本框之类的,这样再用js调用,使显示页面的文本与隐藏页面的文本一致。不过这样不断刷新,人多了可能对服务器要求就很高了,不知各位是如何刷新的,多少时间间隔较合适。
另xmlhttp是什么,还没去了解过。


非常大鱼

janlay

职务:管理员
等级:7
金币:28.0
发贴:7244
#152004/12/7 9:10:14
优秀的数据库服务器和连接驱动程序、快速的磁盘子系统可以有效的缓解数据库的存取压力,对于复杂的运算也可以考虑通过定时刷新缓存来减轻压力,这样基本上就不怕人多了

刷新时间间隔最好设置成可以调整的选项,这样可根据实际情况来设置。

xmlhttp 我了解也不多,好在客户端的源代码都是可以看得到的 GMail好像就是个客户端的 xmlhttp app