不是项目用到了 也不会去研究这个东西 首先引入jar包 目前的最新版本是1.5.2
GetHub源码地址:GitHub - TooTallNate/Java-WebSocket: A barebones WebSocket client and server implementation written in 100% Java.
<dependency> <groupId>org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.5.2</version> </dependency>
首先是websocket的搭建 这个可以说是非常简单的了 直接上代码 没啥好说的
package com.config; import org.java_websocket.client.WebSocketClient; import org.java_websocket.handshake.ServerHandshake; import org.springframework.beans.factory.annotation.Autowired; import java.net.URI; public class MyWebSocketClient extends WebSocketClient {public static boolean WEBSTATUS = false; //连接 public MyWebSocketClient(URI serverUri) { super(serverUri); } //打开连接 @Override public void onOpen(ServerHandshake serverHandshake) { WEBSTATUS = true; } @Override public void onMessage(String s) { //接收消息 } @Override public void onClose(int i, String s, boolean b) { WEBSTATUS = false; } @Override public void one rror(Exception e) { WEBSTATUS = false; } //推送消息 public void sendMsg(String msg){ if(WEBSTATUS){ send(msg); } } }
这里面有个参数 WEBSTATUS 这个是用来记录当前websocket的状态的 因为是作为客户端 就不考虑多个的问题
然后 就是重点了 自动重连
@Bean public WebSocketClient webServiceClient() { try { MyWebSocketClient mWebSocketClient = new MyWebSocketClient(new URI("ws://127.0.0.1:8080/websocket")); mWebSocketClient.connect(); //如果断线,则重连并重新发送验证信息 Timer t = new Timer(); t.scheduleAtFixedRate(new TimerTask() { @Override public void run() { if (!MyWebSocketClient.WEBSTATUS) { try { MyWebSocketClient mWebSocketClient = new MyWebSocketClient(new URI("ws://127.0.0.1:8080/websocket")); mWebSocketClient.connect(); } catch(URISyntaxException e){ e.printStackTrace(); } } } },2000,5000);//5秒执行一次 然后休息2秒 return mWebSocketClient; } catch(URISyntaxException e){ e.printStackTrace(); } return null; }
首先是实例化对象 设置服务器websocket的地址 然后connect() 连接
连接成功后会调用onOpen 这时候会把状态改为true 表示已经连接上
如果没连接上服务器 或者服务器断开和连接异常 那么状态会变为false
线程里面的方法会每隔7秒左右执行一次 执行的时候会根据状态判断是否需要连接websocket
这样子就实现了websocket客户端自动重连