把用户的发言放到application里,当然可以,但这样会增加Servet容器的负担,因为application对象是由Servlet容器维护的,而且还需要不但需要刷新application内容,同时会造成Servlet容器的负担。Java做聊天室一个比较好的办法是,客户端用Applet,服务器用Servlet,
Applet与Servlet底层通信当然是Socket了,
通过HTTP通道的形式可以传递数据,Servlet向每个客户端建立的HTTP通道发数据,Applet向Servlet发送的数据以Servlet为中间站,然后Servlet向各个HTTP通道群发,来达到群聊
的目的,可以看出,这是不需要刷新的,
Applet与Servlet底层通信当然是Socket了,
通过HTTP通道的形式可以传递数据,Servlet向每个客户端建立的HTTP通道发数据,Applet向Servlet发送的数据以Servlet为中间站,然后Servlet向各个HTTP通道群发,来达到群聊
的目的,可以看出,这是不需要刷新的,
三楼兄弟的办法不太明白,你不用socket?你如果把一个用户发言广播的呢?
聊天室的话还是不要用Applet!
要做客户端还是得用swing.Applet只能嵌套的网页里面。
具体聊天室没做过。
只弄过简单的。
方法有两种:
第一种:就是定时刷新,这种比较简单,但页面会出现抖动(频繁刷新导致的)。而且每次都是把 Application里面的发言向Browser写入,很明显数据量大还重复,这种效率是很低下的。第二种:就是利用隐藏框架+JavaScript定时添加信息(记住了,是添加信息,而不是刷新信息)。
框架集包含三个frame,如下:
文本页frametext.htm;name="content"(客人发言显示,记住了,专用来显示)
输入页frameinput.jsp; (客人输入信息)
刷新页framerefresh.jsp; (将它设置为隐藏的,这样就不会出现页面抖动了。)
对于framerefresh.jsp,设置<meta>标签,
<meta http-equiv="refresh" content="2"><!--定时刷新获取最新信息--> 每当来新信息后,利用JavaScript取得frametext.htm的document对象,
top.content.document.write("客人的发言"),
这样不就实现了添加信息了吗?页面显示很平滑,还有些聊天室有些自动清屏,滚屏等功能,不就是一段JavaScript程序的调用吗?
小弟有个想法,不过还没有时间具体实践。
思路可以说一下:在服务器端建立一个数据库代理,到数据库只要开辟个位数个链接池,然后这个代理定时读取、写入数据库,聊天室段定时扫描代理的输出(可以是一个日志(http方式),也可以直接输出到socket口(Applet方式)),需要写数据时,反之
主要是为了避免对数据库的同时大量操作,造成服务器过载。
呵呵,瞎想的,还往高手指点!
你还要多多学习,