最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
SpringBoot WebSocket实时监控异常代码示例
时间:2022-06-29 02:08:32 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下SpringBoot WebSocket实时监控异常代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
绿色代表正常,红色代表异常
预期效果,未接收到请求前----->id为3的提交了异常,id为3的王五变成了红色
实现:
前端:
直接贴代码
实时监控 {{item.id}}.{{item.name}}
后端:
项目结构是这样子的,后面的代码关键注释都有,就不重复描述了
1、新建SpringBoot工程,选择web和WebSocket依赖
2、配置application.yml
#端口 server: port: 18801 #密码,因为接口不需要权限,所以加了个密码做校验 mySocket: myPwd: jae_123
3、WebSocketConfig配置类
@Configuration public class WebSocketConfig { /** * 注入一个ServerEndpointExporter,该Bean会自动注册使用@ServerEndpoint注解申明的websocket endpoint */ @Bean public ServerEndpointExporter serverEndpointExporter(){ return new ServerEndpointExporter(); } }
4、WebSocketServer类,用来进行服务端和客户端之间的交互
/** * @author jae * @ServerEndpoint("/webSocket/{uid}") 前端通过此URI与后端建立链接 */ @ServerEndpoint("/webSocket/{uid}") @Component public class WebSocketServer { private static Logger log = LoggerFactory.getLogger(WebSocketServer.class); //静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。 private static final AtomicInteger onlineNum = new AtomicInteger(0); //concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象。 private static CopyOnWriteArraySetsessionPools = new CopyOnWriteArraySet (); /** * 有客户端连接成功 */ @OnOpen public void onOpen(Session session, @PathParam(value = "uid") String uid){ sessionPools.add(session); onlineNum.incrementAndGet(); log.info(uid + "加入webSocket!当前人数为" + onlineNum); } /** * 连接关闭调用的方法 */ @OnClose public void onClose(Session session) { sessionPools.remove(session); int cnt = onlineNum.decrementAndGet(); log.info("有连接关闭,当前连接数为:{}", cnt); } /** * 发送消息 */ public void sendMessage(Session session, String message) throws IOException { if(session != null){ synchronized (session) { session.getBasicRemote().sendText(message); } } } /** * 群发消息 */ public void broadCastInfo(String message) throws IOException { for (Session session : sessionPools) { if(session.isOpen()){ sendMessage(session, message); } } } /** * 发生错误 */ @OnError public void onError(Session session, Throwable throwable){ log.error("发生错误"); throwable.printStackTrace(); } }
5、WebSocketController类,用于进行接口测试
@RestController @RequestMapping("/open/socket") public class WebSocketController { @Value("${mySocket.myPwd}") public String myPwd; @Autowired private WebSocketServer webSocketServer; /** * 手机客户端请求接口 * @param id 发生异常的设备ID * @param pwd 密码(实际开发记得加密) * @throws IOException */ @PostMapping(value = "/onReceive") public void onReceive(String id,String pwd) throws IOException { if(pwd.equals(myPwd)){ //密码校验一致(这里举例,实际开发还要有个密码加密的校验的),则进行群发 webSocketServer.broadCastInfo(id); } } }
测试
1、打开前端页面,进行WebSocket连接
控制台输出,连接成功
2、因为是模拟数据,所以全部显示正常,没有异常提交时的页面呈现
3、接下来,我们用接口测试工具Postman提交一个异常
注意id为3的这个数据的状态变化
我们可以看到,id为3的王五状态已经变成异常的了,实时通讯成功。
相关文章
- 《原神》5.2卡池抽取建议 11-14
- 《原神》5.2版本新怪物介绍 11-14
- 《原神》希诺宁增伤触发方法 11-14
- 《原神》循音觅奇活动入口 11-14
- 《原神》循音觅奇兑换码获取方法 11-14
- 《原神》花羽会活动飞行技巧介绍 11-14