在javaee项目中使用WebSocket
来源:互联网 发布:mac版梦幻西游卸载 编辑:程序博客网 时间:2024/06/05 04:29
这篇文章是对最近使用WebSocket的一个经验分享。
首先,什么是WebSocket,有兴趣的朋友可以看看这里:http://zh.wikipedia.org/zh-cn/WebSocket
对WebSocket有了基本认识后,我们可以着手开发WebSocket应用程序,推荐使用Maven搭建项目。我使用的服务器是Tomcat 7.0.56(Tomcat 7或者更高版本才能使用WebSocket,而且至少是7.0.47以上版本才支持, LZ一开始用7.0.41部署没有成功...)。WebSocket 还需要javaee7的支持,所以在pom.xml中需要引用一下jar:
<span style="white-space:pre"></span><dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> </dependency> <dependency> <groupId>javax.websocket</groupId> <artifactId>javax.websocket-api</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> <!-- 增加fastjson-1.1.34.jar --> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.1.34</version> </dependency>
因为Tomcat自带了websocket-api,所以项目中的websocket-api是provided,方便编译。
接着可以编写服务端的WebSocket程序,示例代码:
package com.jiepu.visuallab.web.servlet;import com.alibaba.fastjson.JSON;import com.jiepu.visuallab.common.C;import com.jiepu.visuallab.common.bean.SocketReply;import com.jiepu.visuallab.common.tools.HostTools;import javax.websocket.*;import javax.websocket.server.ServerEndpoint;import java.util.HashMap;import java.util.Map;import java.util.Set;/** * * Created by zengxm on 2014/11/4. */@ServerEndpoint("/websocket/test")public class HostWebSocketServlet { private static Map<String, Session> sessions = new HashMap<String, Session>(); public HostWebSocketServlet(){ System.out.println("--------------------------------------"); } /** * 向客户端群发信息 * @param category * @param data */ public synchronized static void sendAll(String category, Object data){ SocketReply re = new SocketReply(category, data); String replyStr = JSON.toJSONString(re); System.out.println("开始群发信息!"); Set<String> keys = sessions.keySet(); for(String k:keys){ Session s = sessions.get(k); if(s.isOpen()){ try{ s.getBasicRemote().sendText(replyStr); System.out.println("发送成功, id="+k); }catch(Exception e){ System.err.println("发送出错:"+e.getMessage()); } } } } @OnMessage public void onMessage(Session session, String msg){ System.out.println("收到信息"); try { session.getBasicRemote().sendText("get"); }catch (Exception e){ e.printStackTrace(); } } @OnOpen public void onOpen(Session session, EndpointConfig config){ try { sessions.put(session.getId(), session); SocketReply re = new SocketReply(C.HOST_DATA, HostTools.getHostList()); String replyStr = JSON.toJSONString(re); session.getBasicRemote().sendText(replyStr); }catch (Exception e){ e.printStackTrace(); } } @OnError public void onError(Session session, Throwable throwable){ } @OnClose public void onClose(Session session, CloseReason reason){ try { System.out.println("断开连接, id="+session.getId()); synchronized (sessions){ sessions.remove(session.getId()); } }catch (Exception e){ e.printStackTrace(); } }}
在html页面中可以这样连接到上面定义好的WebSocket:
var url = "ws://"+document.location.host+"${base}/websocket/test"; var ws = new WebSocket(url); ws.onopen = function(e){ console.log("ws connect Success!"); HostUtil.start(); HostConsole.init(); listeners.push(HostConsole); } ws.onmessage = function(evt){ console.log("ws get:"+evt.data); }
上面代码中的${base}就是项目名称,替换成实际的路径即可。
将项目部署到tomcat,运行之,在console可以看到连接信息:
总结:
1. 如果环境都搭建好了,运行项目也没报错,但是连接不了WebSocket(js端报404错误),可以看看是不是jar冲突了。就是项目lib里面是不是有websocket-api相关的jar,有的话要删除,不然会跟tomcat自带的websocket冲突,导致服务端程序没有执行。
更多websocket的学习资料在这:http://mgreau.com/posts/2013/11/11/javaee7-websocket-angularjs-wildfly.html
2 0
- 在javaee项目中使用WebSocket
- 在python中使用websocket
- 在SpringMVC中使用WebSocket
- 在express中使用websocket
- 在SpringMVC中使用WebSocket
- 在flask中使用WebSocket
- javaEE websocket
- 利用dwebsocket在Django中使用Websocket
- 协同过滤算法在JavaEE项目中应用
- WebSocket(一):Java Web项目使用Websocket
- Spring项目中使用webservice实现h5的websocket通信
- 解决springmvc项目中使用websocket注解不能注入
- javaEE中使用webservice
- 如何在javaWeb/javaEE环境中使用JDiy
- 在JavaEE版本Eclipse中配置与使用Tomcat
- Tomcat中通过JavaEE实现的WebSocket程序获取ServletContext
- JavaEE实现WebSocket(二)使用SpringMvc和AngularJS
- 处理JavaEE项目中警告
- 手游ip是什么意思
- Web端知识点小计
- iPhone6/6 Plus适配详解
- windows系统通知区域编程(SystemTray or NotificationIcon)
- Bitmap 图片处理工具类
- 在javaee项目中使用WebSocket
- C/C++静态库创建、导出和使用(图文)
- C++基本功
- 黑马程序员——Java基础---IO流(二)
- eclipse中集成了weblogic10.3.5,然后控制台启动weblogic,中文显示乱码的解决方法
- 关于onNewIntent的使用
- svn服务器无法连接
- 什么是MIME类型?
- 日语学习之沪江N4基础 20141203 -4