不是項目用到了 也不會去研究這個東西 首先引入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; } }
到這里 完結