java推送Comet_使用Comet4j实现消息推送
public?class?NewMsgCollector?extends?ConnectListener?implements?ServletContextListener?{
private?static?final?String?CHANNEL?=?"hello";
public?void?contextInitialized(ServletContextEvent?contextEvent)?{
//注冊應用的channel
CometContext?context?=?CometContext.getInstance();
context.registChannel(CHANNEL);
//添加監聽器
CometEngine?engine?=?CometContext.getInstance().getEngine();
engine.addConnectListener(this);
}
public?void?contextDestroyed(ServletContextEvent?contextEvent)?{}
public?boolean?handleEvent(ConnectEvent?connEvent)?{
final?CometConnection?conn?=?connEvent.getConn();
//建立連接和用戶的關系
doCache(conn);
final?String?connId?=?conn.getId();
/*模擬業務邏輯*/
Timer?timer?=?new?Timer(true);
TimerTask?task?=?new?TimerTask()?{
public?void?run()?{
CometEngine?engine?=?CometContext.getInstance().getEngine();
//推送到所有客戶端
//engine.sendToAll("hello",?connId?+?"?-?you?have?"?+?((int)(Math.random()?*?9)?+?1)?+?"?new?message?
");
if?(CacheManager.getContent(connId).isExpired())?{
doCache(conn);
}
if?(simulateService(String.valueOf(CacheManager.getContent(connId).getValue())))?{
//推送到指定的客戶端
engine.sendTo(CHANNEL,?engine.getConnection(connId),?CacheManager.getContent(connId).getValue()
+?"?-?you?have?"?+?((int)?(Math.random()?*?9)?+?1)?+?"?new?message?
");
}
}
};
timer.schedule(task,?10000,?(1000?*?5));
return?true;
}
private?void?doCache(final?CometConnection?conn)?{
Object?userId?=?conn.getRequest().getSession().getAttribute("currentUserId");
if?(userId?!=?null)?{
CacheManager.putContent(conn.getId(),?String.valueOf(userId),?CacheConstant.EXPIRE_AFTER_ONE_HOUR);
}
}
/**
*?模擬業務
*?返回true,false
*?true即表示需要推送消息,false即不需要推送
*/
private?boolean?simulateService(String?id)?{
int?flag?=?(int)?Math.round(Math.random());
if?(flag?==?0)?{
System.out.println(id?+?"?-?no?messge...");
return?false;
}
System.out.println(id?+?"?-?messge?is?coming...");
return?true;
}
}
總結
以上是生活随笔為你收集整理的java推送Comet_使用Comet4j实现消息推送的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何更新mysql数据库字段_如何使用M
- 下一篇: 1万并发服务器配置_小程序后端服务器搭建