JAVA 实现websocket作为客户端(自动断线重连)

您所在的位置:网站首页 websocket自动断开连接 JAVA 实现websocket作为客户端(自动断线重连)

JAVA 实现websocket作为客户端(自动断线重连)

2023-10-17 05:34| 来源: 网络整理| 查看: 265

因为很少有这样作为客户端的使用,但是遇上特殊需求还是要作为客户端使用,spring-boot-starter集成的无法实现客户端,直接上代码

pom引入,这里使用的spring boot 其他项目自行下载jar包库

org.java-websocket Java-WebSocket 1.3.8 package com.jwuwb.library.service.websocket; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.jwuwb.library.entity.PositionStation; import com.jwuwb.library.service.PositionStationService; import org.java_websocket.WebSocket.READYSTATE; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.net.URI; /** * websocket 建立连接... * @author apple */ @Component public class Client { private static final Logger logger = LoggerFactory.getLogger(Client.class); public static void createConnect() throws Exception{ WebSocketClient client = new WebSocketClient(new URI(这里是你连接的websocket的地址)) { @Override public void onOpen(ServerHandshake arg0) { logger.info("开始建立链接..."); } @Override public void onMessage(String arg0) { logger.info("检测到服务器请求...arg0 : " + arg0); } @Override public void onError(Exception arg0) { arg0.printStackTrace(); logger.info("客户端发生错误,即将关闭!"); } @Override public void onClose(int arg0, String arg1, boolean arg2) { logger.info("客户端已关闭!"); logger.info("开始尝试重新连接..."); try { Client.createConnect(); } catch (Exception e) { e.printStackTrace(); logger.info("重新连接失败,请检查网络!"); } } }; client.connect(); //判断连接状态, while (client.getReadyState().equals(READYSTATE.OPEN)) { logger. info("成功建立链接!"); } } }

由于websocket是多例的无法直接注入可以使用:(这里只是个示例,使用静态变量的方式可以实现注入)

public static UserService userService; @Autowired public void setService(UserService userService) { Client.userService = userService; }

很简单直接调用

Client.createConnect(); 或者@PostConstruct直接项目启动一起启动

2021-01-08:

修复会自动断线bug: 

在连接之前设置client的属性

client.setConnectionLostTimeout(0);


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3