当前位置: 首页 > news >正文

java WebSocket带参数处理使用

1、webSocket实现代码

@Component
public class WebSocketStompConfig {//这个bean的注册,用于扫描带有@ServerEndpoint的注解成为websocket// ,如果你使用外置的tomcat就不需要该配置文件@Beanpublic 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;@OnOpenpublic 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());}@OnClosepublic void onClose(){webSocketMap=new ConcurrentHashMap<>();log.info("有一连接关闭!当前在线人数为" + getOnlineCount());}@OnMessagepublic void onMessage(String message, Session session) {System.out.println("来自客户端的消息:" + message);}@OnErrorpublic 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);
}

http://www.lryc.cn/news/258939.html

相关文章:

  • OkHttp: 拦截器和事件监听器
  • 总结一些vue3小知识2
  • 【Excel设置动态图表】
  • 用 C 写一个卷积神经网络
  • 直面双碳目标,优维科技携手奥意建筑打造绿色低碳建筑数智云平台
  • docker 基础入门
  • HarmonyOS:NativeWindow 开发指导
  • 汉威科技传感器为农业加点“智慧”
  • springboot listener、filter登录实战
  • 【数据结构—栈的实现(数组栈)】
  • Linux安装Halo(个人网站)
  • Java - Spring中Bean的循环依赖问题
  • 使用 Python 实现简单的爬虫框架
  • Activiti七大接口,28张表详解
  • 解决msvcr120.dll文件丢失问题
  • AI日报:人工智能与新材料的发现
  • 鱼fish数据集VOC+yolo-1400张(labelImg标注)
  • 爬虫解析-BeautifulSoup-bs4(七)
  • 分类预测 | Matlab实现OOA-SVM鱼鹰算法优化支持向量机的多变量输入数据分类预测
  • 2.vue学习笔记(目录结构+模板语法+属性绑定)
  • Python基本语法及高级特性总结
  • 03-详解网关的过滤器工厂和常见的网关过滤器路由过滤器,默认过滤器,全局过滤器的执行顺序
  • 基于SSM的小儿肺炎知识管理系统设计与实现
  • HuffMan tree
  • 各地加速“双碳”落地,数字能源供应商怎么选?
  • 19.java绘图
  • 提升工作效率,尽在Microsoft Office LTSC 2021 for Mac!
  • day24_java的反射机制
  • VUE学习二、创建一个前端项目
  • 「红队笔记」靶机精讲:Prime1 - 信息收集和分析能力的试炼