赞
踩
1、webSocket实现代码
- @Component
- public class WebSocketStompConfig {
- //这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket
- // ,如果你使用外置的tomcat就不需要该配置文件
- @Bean
- public ServerEndpointExporter serverEndpointExporter() {
- return new ServerEndpointExporter();
- }
- }
- @Component
- @ServerEndpoint(value = "/webSocket")
- @Slf4j
- public class WebSocket {
- private static int onlineCount = 0;
- private static ConcurrentHashMap<String, Set<Session>> webSocketMap = new ConcurrentHashMap<>();
- private Session session;
-
- @OnOpen
- public void onOpen(Session session) {
-
- this.session = session;
- // 获取URL中的参数
- Map<String, List<String>> params = session.getRequestParameterMap();
- List<String> funcTypes = params.get("funcType");
-
- if (!funcTypes.isEmpty()) {
- // 取出funcType参数的值
- String funcType = funcTypes.get(0);
-
- if(webSocketMap.containsKey(funcType)){
- webSocketMap.get(funcType).add(session);
- }else{
- Set<Session> sessionSet = new HashSet<>();
- sessionSet.add(session);
- webSocketMap.put(funcType,sessionSet);
- }
- }
-
- System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
- }
-
- @OnClose
- public void onClose(){
- webSocketMap=new ConcurrentHashMap<>();
- log.info("有一连接关闭!当前在线人数为" + getOnlineCount());
- }
-
- @OnMessage
- public void onMessage(String message, Session session) {
- System.out.println("来自客户端的消息:" + message);
- }
-
- @OnError
- public void onError(Session session, Throwable error) {
- System.out.println("发生错误");
- error.printStackTrace();
- }
-
- public static void sendMessage(Session session, String message) throws IOException {
- session.getBasicRemote().sendText(message);
- }
-
- public static synchronized int getOnlineCount() {
- return onlineCount;
- }
-
- public static synchronized void addOnlineCount() {
- WebSocket.onlineCount++;
- }
-
- public static synchronized void subOnlineCount() {
- WebSocket.onlineCount--;
- }
-
- public static void setOnlineCount(int onlineCount) {
- WebSocket.onlineCount = onlineCount;
- }
-
- public static ConcurrentHashMap<String, Set<Session>> getWebSocketMap() {
- return webSocketMap;
- }
-
- public static void setWebSocketMap(ConcurrentHashMap<String, Set<Session>> webSocketMap) {
- WebSocket.webSocketMap = webSocketMap;
- }
-
- public Session getSession() {
- return session;
- }
-
- public void setSession(Session session) {
- this.session = session;
- }
-
- /**
- * 发送自定义消息
- * */
- public static void sendInfo(String message,String funcType) throws Exception {
- if(webSocketMap.containsKey(funcType)){
- Set<Session> sessionSet = webSocketMap.get(funcType);
- if(sessionSet!=null){
- for (Session session : sessionSet) {
- if(session.getBasicRemote()!=null){
- session.getBasicRemote().sendText(message);
- }
- }
- }
- }else{
- log.error("订阅类型:"+funcType+",不存在!");
- throw new Exception("连接已关闭,请刷新页面后重试");
- }
-
- }
-
- }
二、java代码调用,往websocker赋数据
WebSocket.sendInfo(JSON.toJSONString("sdfasd232"),"3");
三、测试是否连接成功以及推送信息
四、前端代码处理
- /**
- * 初始化websocket连接
- */
- function initWebSocket() {
- var websocket = null;
- if('WebSocket' in window) {
- websocket = new WebSocket("ws://127.0.0.1:8080/webSocket?funcType=3" );
- } else {
- alert("该浏览器不支持websocket!");
- }
- websocket.onopen = function(event) {
- console.log("建立连接");
- websocket.send('Hello WebSockets!');
- }
- websocket.onclose = function(event) {
- console.log('连接关闭')
- reconnect(); //尝试重连websocket
- }
- //建立通信后,监听到后端的数据传递
- websocket.onmessage = function(event) {
- let data = JSON.parse(event.data);
- //业务处理....
- if(data.step == 1){
- alert(data.msg);
- }
- }
- websocket.onerror = function() {
- // notify.warn("websocket通信发生错误!");
- // initWebSocket()
- }
- window.onbeforeunload = function() {
- websocket.close();
- }
- // 重连
- function reconnect() {
- console.log("正在重连");
- // 进行重连
- setTimeout(function () {
- initWebSocket();
- }, 1000);
- }
-
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。