论坛首页 Java企业应用论坛

[讨论]大家都来谈谈这两种聊天室技术的优缺点及实用性

浏览 10709 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2003-09-27  
1.用Java实现(不是JSP)的聊天室。
homepage: http://www.chenshen.com/Projects/eChat/eChat.htm

大致原理:
与一般的ASP聊天室不同,这种聊天服务器是完全独立的服务端程序。当它运行的时候先监听端口,一旦用户通过浏览器访问,便模拟WEB服务器通过HTTP和用户通讯。由于使用了Java技术,所以安全性以及速度上比起一般的ASP聊天室优势明显。
以下列出了eChat聊天服务器的技术特点:
1) 跨平台:可以稳定运行在Liunx下
2) 多线程:提高了聊天服务器的整体性能
3) Server Push:使客户与服务器处于不间断状态,实现了“无刷新”聊天

这种基于服务端的聊天室我还是第一次见到,孤陋寡闻吧,使用起来感觉挺快的,而且挺方便,不需要用到Tomcat等JSP容器。


2.一个用ASP.Net实现的超快聊天室。
http://www.lostinet.com/jancchat/Login.aspx
如果是一般的ASP.Net的聊天室,那没有什么,但是它的特色是采用了一个“Janc”的组件,可以把服务器的静态方法发布给客户端进行远程调用,页面不用刷新,非常快。

基本原理:
如果要完成一项不刷新某页而进行和服务器交互的过程,那应该怎么做呢?

常规来说,有以下方法:

1。使用JavaApplet作为中介和服务器交互。不过用户必须为这交互过程编写Java代码。
2。使用ActiveX控件做中介。但是ActiveX的权限太大,未一定能得到客户信任。
3。使用IFrame把某个窗体隐藏,然后用传统的方法进行GET和POST。不过请求数据的发送和状态都非常难控制
4。使用MSXML的XMLHTTP来进行数据的传输。这个只适应于Win98或安装了MSXML(IE6自带的Windows系统)
5。使用dotnet的Assembly来写客户端程序。不过这需要客户端安装dotnet组件。

Lostinet.Janc(以下称为Janc)是一个实现和服务器交互的组件。
实际上,它没有提供新的方法来进行和服务器的交互。
它的编写目的就只有一个:为了方便:
要方便代码的编写,要方便程序的发布。。

Lostinet.Janc采用第4种方法(使用Microsoft.XMLHTTP)和服务器交互。

从作者采用这个组件做成的聊天室 http://www.lostinet.com/jancchat/guest/ 和论坛 http://forum.lostinet.com/Forum.Aspx 可以看到速度实在快的厉害

---------------------------------
好了,开始讨论吧,我是一个Java技术的初学者,对这些都很难有比较深入的分析和思考,下面说一下我的看法吧。

两个聊天室的作者都谈到,采用这种技术可以减轻服务器的负担,加快速度,实际上这是做到了,两者都非常快。特别是那个ASP.Net的技术,无需刷新页面就可以做到更新页面。我想,对于中小型的应用,它应该是不错的选择吧。对于大型的应用,就不得而知了。
另外,今天看到dlee说到“传统的 J2EE Patterns 中将表示层完全交给 JSP/Servlet 来做,忽略了浏览器 JavaScript 的能力,这是一个重大的失误。 ”,我想起某文章中说到ASP.Net大量使用了JScript,造成“过度复杂”。现在很少听到JSP的应用用到JavaScript,因此对dlee的技术很感兴趣,想听听。

各位高手达人,请发表一下各位的简介吧,谢谢。
   发表时间:2003-09-28  
还有一种,就是server不关闭http 连接,一旦有人说话了就push过去。其实就是一个长连接。

这样子兼容性不错,不需要任何客户端控件,不需要客户端刷新,速度也很快。
0 请登录后投票
   发表时间:2003-09-28  
用XMLHTTP有个问题就是,XMLHTTP如果用同步模式,容易造成IE死锁。如果用异步模式,就会出现聊天次序颠倒的可能性。

而且这对server的压力,和隐藏frame刷新是一样的。
0 请登录后投票
   发表时间:2003-09-28  
哦,没注意,第一种那种所谓的
3) Server Push:使客户与服务器处于不间断状态,实现了“无刷新”聊天 

就是我上面说的不结束http连接。

至于后台是不是用java,与最终速度无关。实际上安全性什么的,对server端程序没什么意义。用native code比如C++,只会更快。
0 请登录后投票
   发表时间:2003-09-28  
曹晓钢 写道
用XMLHTTP有个问题就是,XMLHTTP如果用同步模式,容易造成IE死锁。如果用异步模式,就会出现聊天次序颠倒的可能性。

而且这对server的压力,和隐藏frame刷新是一样的。


能否说明一下,或者提供一些文章链接。
此外也很想听听dlee的见解。
0 请登录后投票
   发表时间:2003-09-28  
曹晓钢说的很对。我们对于这个问题是这样处理的,如果只传递少量数据,就采用同步方式来做。如果传递大量数据,就采用异步方式来做。异步方式是设置一个回调方法,数据传到前台后调用回调方法完成页面的刷新。这样可以尽量减少出现 IE 死锁的情况。MessageBean 的出现也是为了解决迅速响应这个问题的。
XMLHTTP 由于只传递 XML 数据,对于服务器的压力应该是比刷新 iframe 要小些。当然 iframe 的内容也可以是一个 XML island 的数据,这样两者就是一样的了。
次序颠倒确实不太容易解决,每条消息传到服务器可以自动加一个时间戳,传输到浏览器后,浏览器缓冲一些消息后进行排序。但是做起来可没那么简单,可能还要设置一个滑动窗口,还有确认、重发,简直就是自己实现一套通信协议了。以前我就是搞这个的,呵呵。
Jabber 是一套实现即时通信的中间件,功能很强,各位有空了可以看看。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics