comet4j 消息推送
comet4j 消息推送
项目需求我们系统集成大量的接口供其他系统调用,为了实现当接口出现错误时能够及时提示管理人员调整。具体:现有 A, B, C, D四台计算机, A和B为服务器,C和D为普通客户机,我们系统在B上,A调用B上的接口,C和D正登陆B部署的web项目。当A调用B出现异常,我们将异常信息已经传输的数据在C和D的界面弹出。
方案1:用前台定时器对系统日志表刷新,
方案2:使用消息推送
我这里先写个 dome
1.准备工作
下载所需工具 链接:http://pan.baidu.com/s/1sk9H5WL 密码:bibg
2.配置 tomcat,打开server.xml
修改前
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改后
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" redirectPort="8443"/>
在eclipse上开发修改server.xml
3.将jar放入项目中
4.将js引入到要显示的页面里边
5.配置web.xml
(1)
<listener> <description>Comet4J容器侦听</description> <listener-class>org.comet4j.core.CometAppListener</listener-class> </listener> <servlet> <description>Comet连接[默认:org.comet4j.core.CometServlet]</description> <display-name>CometServlet</display-name> <servlet-name>CometServlet</servlet-name> <servlet-class>org.comet4j.core.CometServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>CometServlet</servlet-name> <url-pattern>/conn</url-pattern> </servlet-mapping>
(2) 初始化
<listener> <description>HelloWorld</description> <listener-class>org.pbw.web.test.HelloWorld</listener-class> </listener>
6 初始化实现类
public class HelloWorld implements ServletContextListener {
private static final String CHANNEL = "hello";
public void contextInitialized(ServletContextEvent arg0) {
CometContext cc = CometContext.getInstance();
cc.registChannel(CHANNEL);
}
public void contextDestroyed(ServletContextEvent arg0) {
}
}
7.jsp页面实现
<script type="text/javascript" language="javascript"> $(document).ready(function() { var hello = document.getElementById('hello'); JS.Engine.on('hello', function(text){ hello.innerHTML=text; }); JS.Engine.start('conn'); }); </script>
<div id="hello"></div>
8.调用接口时向客户端推送消息
http://127.0.0.1:8080/org.outdoors.core/ws/co?wsdl
接口实现类
@Service
public class UIServiceImpl implements IUserService {
@Override
public String findUserList(String str) {
try {
if("1".equals(str)){
Comet4jUtil.sendMsgToClient("调用接口成功!");
}
} catch (Exception e) {
}
return "1";
}
}
public class Comet4jUtil {
private static final String CHANNEL = "hello";
public static boolean sendMsgToClient(String str){
CometEngine engine = CometContext.getInstance().getEngine();
engine.sendToAll(CHANNEL , "你很讨厌!");
return true;
}
}
看看效果吧
这里什么都没有对吧调用下接口试试!
这里的数据就是从后台推到前台客户端(所有的客户端)的