使用Tomcat实现基于iframe streaming的Comet聊天室

本文介绍了一个基于Comet技术实现的聊天室Demo,利用Tomcat的CometProcessor接口和iframe streaming进行实时消息推送。通过Java后台的CometServlet处理Http长连接,MessageSender线程使用ArrayBlockingQueue实现生产者消费者模式,处理聊天消息的发送。前端通过隐藏的iframe接收并显示消息。
摘要由CSDN通过智能技术生成

首先,无图无真相,先上图:


这是一个基于Comet实现的聊天室Demo,功能类似于QQ群聊。聊天过程中如果有新想消息,那么就需要服务器推送消息到浏览器,所以这里可以使用Comet技术。

Comet一般有两种实现方式:长轮询(long-polling)、流(streaming)。而本文中的这个Demo的实现方式是基于流(streaming),前端使用了一个隐藏的iframe,这也是比较常用的一种方式。不过由于使用iframe流,导致浏览器上面的进度一直在转,这是因为iframe一直在加载的原因,先不要在意这些细节。

Tomcat提供了Comet相关的API,用Servlet实现CometProcessor接口就可以很简单的实现Comet了。

1、准备工作

1.1、首先,需要配置Tomcat连接为NIO,否则无法使用Tomcat Comet。

Tomcat目录下conf/server.xml,protocol更改为org.apache.coyote.http11.Http11NioProtocol:

<Connector connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>

配置好后启动Tomcat应该是这样:


1.2、在开发过程中,需要用到Tomcat的catalina.jar包,在Tomcat的lib目录下。程序在Tomcat中运行时再去掉。

2、Java后台

2.1、CometServlet

这个Servlet是处理Comet Http长连接的Servlet,这个Servlet实现Tomcat提供的CometProcessor接口,通过event方法来处理Http长连接周期内的多种事件:

BEGIN事件:有新的HTTP连接;
END事件:连接关闭,例如浏览器关闭;
ERROR事件:连接错误,例如timeout。

有关事件更详细介绍在Tomcat官方文档中有:http://tomcat.apache.org/tomcat-7.0-doc/aio.html

public class CometServlet extends HttpServlet implements CometProcessor {
	
	// 所有正在等待响应的HTTP长连接
	private ArrayList<HttpServletResponse> connections = nu
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值