com4j消息推送

本例子参考:  http://blog.csdn.net/majian_1987/article/details/8489738


实现功能:后台接受消息,将消息数量推送到前端。主要使用阻塞队列来存放消息,后面若要取消息的话,当阻塞队列中无消息时,线程会阻塞等待。


阻塞队列参考:http://blog.csdn.net/conquer0715/article/details/12367087


部分代码如下:

public class ShowMessage implements ServletContextListener{

	private static final String CHANNEL = "chat";
	//创建一个长度为10的阻塞队列
    public static ArrayBlockingQueue<String> messages = new ArrayBlockingQueue<String>(10);  
	 XMPPConnection conn = null;

	public void contextInitialized(ServletContextEvent arg0) {
		CometContext cc = CometContext.getInstance();
		cc.registChannel(CHANNEL);//注册一个频道,用于和前台互发消息

		Thread getMsg = new Thread(new Runnable() {
			public void run() {
				 Receiver r = new Receiver();
					conn = r.getConnection(); //获取与openfire服务器的连接,并登录
					conn.getChatManager().createChat("aa@youlian", new MessageListener() {
						public void processMessage(Chat arg0, Message arg1) {
							String msg = arg1.getBody();
							messages.add(msg);
							System.out.println("信息数量:"+messages.size());
							CometEngine ce = CometContext.getInstance().getEngine();
							ce.sendToAll(CHANNEL, messages.size());
						}
					 });	 	 
			}
		});

		getMsg.setDaemon(true);
        getMsg.start();

	}
	
		public void contextDestroyed(ServletContextEvent arg0) {
			
		}
}
	

前台页面:

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Comet4J Hello World</title>
<script type="text/javascript" src="comet4j.js"></script>
<script type="text/javascript" src="jquery-2.1.1.js"></script>
<script type="text/javascript">
function init(){
	var kbDom = document.getElementById('nums');
	JS.Engine.on({
		chat : function(nums){//侦听一个channel
			kbDom.innerHTML = nums;
		}
	});
	JS.Engine.start('receive');
}
</script>
</head>
<body οnlοad="init()">
	接受的消息为:<span id="nums">0</span>。<br/>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值