java 实现websocket当客户端连接服务器以及自动重连的方式
不是项目用到了 也不会去研究这个东西 首先引入jar包 目前的最新版本是1.5.2
<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;
//重连 ReconnectThreadEnum.getInstance().reconnectWs(this);
}
@Override public void onError(Exception e) { WEBSTATUS = false; }
//推送消息 public void sendMsg(String msg){ if(WEBSTATUS){
send(msg);
}
}
}
这里面有个参数 WEBSTATUS 这个是用来记录当前websocket的状态的 因为是作为客户端 就不考虑多个的问题
然后 就是重点了 自动重连
package com.jinfu.sdkdemo.config;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public enum ReconnectThreadEnum {
WebSocketInstance(){
@Override
public void reconnectWs(MyWebSocketClient demoWebSocketClient) {
cachedThreadPool.execute(new Runnable() {
@Override
public void run() {
try {
//重连间隔一秒
Thread.sleep(1000);
System.out.println("重新连接");
} catch (InterruptedException e) {
e.printStackTrace();
}
demoWebSocketClient.reconnect();
}
});
}
};
private static final ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
public abstract void reconnectWs(MyWebSocketClient demoWebSocketClient);
public static ReconnectThreadEnum getInstance(){
return WebSocketInstance;
}
}
初始化 WebSocketClient对象
package com.jinfu.sdkdemo.config; import org.java_websocket.client.WebSocketClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.util.StringUtils; import java.net.URI; import java.net.URISyntaxException; @Configuration public class TestBean { @Autowired public Environment env; @Bean public WebSocketClient webServiceClient() { try { MyWebSocketClient mWebSocketClient = new MyWebSocketClient(new URI(StringUtils.hasLength(env.getProperty("websocket.url"))?env.getProperty("websocket.url"):"ws://127.0.0.1:8080/websocket")); mWebSocketClient.connect(); return mWebSocketClient; } catch(URISyntaxException e){ e.printStackTrace(); } return null; } }
到这里 完结