java 實現websocket當客戶端連接服務器以及自動重連的方式


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

到這里 完結 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM