Springboot集成websocket封装java客户端,接收远程websocket服务端信息

网上有很多关于java服务端和HTML客户端的博客,但是业务中其实有很多要运用到后台对后台,毕竟是微服务嘛。

这是我写的java客户端,已经上线了,验证可用

1、pom文件配置jar包


      org.springframework.boot
      spring-boot-starter-websocket



    org.java-websocket
    Java-WebSocket
    1.4.0

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);
}

是用来接收服务端发过来的信息

 

你可能感兴趣的:(WebSocket)