Springboot集成websocket封裝java客戶端,接收遠程websocket服務端信息

網上有很多關於java服務端和HTML客戶端的博客,但是業務中其實有很多要運用到後臺對後臺,畢竟是微服務嘛。

這是我寫的java客戶端,已經上線了,驗證可用

1、pom文件配置jar包

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!--websocket作爲客戶端-->
<dependency>
    <groupId>org.java-websocket</groupId>
    <artifactId>Java-WebSocket</artifactId>
    <version>1.4.0</version>
</dependency>

2、創建java websocket客戶端工具類

package com.netposa.gat.platform.constant;



import lombok.extern.slf4j.Slf4j;
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_6455;
import org.java_websocket.handshake.ServerHandshake;
import org.springframework.stereotype.Component;

import java.net.URI;
import java.net.URISyntaxException;

@Slf4j
@Component
public class JavaWebSocketClient {
    /**
     * 獲取客戶端連接實例
     * @param uri
     * @return
     */
    public WebSocketClient getClient(String uri){
        try {
            //創建客戶端連接對象
            WebSocketClient client = new WebSocketClient(new URI(uri),new Draft_6455()) {
                /**
                 * 建立連接調用
                 * @param serverHandshake
                 */
                @Override
                public void onOpen(ServerHandshake serverHandshake) {
                    log.info("===建立連接===");
                }
                /**
                 * 收到服務端消息調用
                 * @param s
                 */
                @Override
                public void onMessage(String s) {
                    log.info("====收到來自服務端的消息===" + s);
                }
                /**
                 * 斷開連接調用
                 * @param i
                 * @param s
                 * @param b
                 */
                @Override
                public void onClose(int i, String s, boolean b) {
                    log.info("關閉連接:::" + "i = " + i + ":::s = " + s +":::b = " + b);
                }
                /**
                 * 連接報錯調用
                 * @param e
                 */
                @Override
                public void onError(Exception e) {
                    log.error("====出現錯誤====" + e.getMessage());
                }
            };
            //請求與服務端建立連接
            client.connect();
            //判斷連接狀態,0爲請求中  1爲已建立  其它值都是建立失敗
            while(client.getReadyState().ordinal() == 0){
                try {
                    Thread.sleep(200);
                }catch (Exception e){
                    log.warn("延遲操作出現問題,但並不影響功能");
                }
                log.info("連接中.......");
            }
            //連接狀態不再是0請求中,判斷建立結果是不是1已建立
            if (client.getReadyState().ordinal() == 1){
                return client;
            }
        }catch (URISyntaxException e){
            log.error(e.getMessage());
        }
        return null;
    }
}

3、創建連接websocket的接口和接口實現類,用來做具體的業務邏輯處理

package com.netposa.gat.service.impl;
import com.alibaba.fastjson.JSON;
import com.netposa.gat.platform.constant.JavaWebSocketClient;
import com.netposa.gat.service.WebSocketClientService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import org.java_websocket.client.WebSocketClient;


@Service
@Component
@Slf4j
public class WebSocketClientServiceImpl implements WebSocketClientService {

    @Autowired
    private JavaWebSocketClient javaClient;

    @Override
    public void getRealTimeInformation() {

        String url = "ws://15.137.17.25:9000/api/cn/v1.0/ws/alarm/face/FCDE5939596F46A08846B8B48EA0B5BF";
        WebSocketClient client = this.javaClient.getClient(url);
    }

}
4、實現效果

其中JavaWebSocketClient中的

public void onMessage(String s) {
    log.info("收到來自服務端的消息:::" + s);
}

是用來接收服務端發過來的信息

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章