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; } }
看看效果吧
这里什么都没有对吧调用下接口试试!
这里的数据就是从后台推到前台客户端(所有的客户端)的