• springboot websocket 客户端实现


    实现客户端的目的,是我为了把websocket服务端与业务层分离开单独做个服务。我还专门把客户端配置到common模块中。只要引用到了common模块的服务。默认都实现了客户端。but,需要做下配置才能实现客户端

    
        org.springframework.boot
        spring-boot-starter-websocket
    
    @Component
    @ClientEndpoint
    public class WebSocketClient {
    
        @Value("${websocket.server.url:127.0.0.1:8692/ws}")
        private String serverUrl;
    
        @Value("${websocket.server.user:system@1}")
        private String user;
    
        private Session session;
    
        @PostConstruct
        void init() {
            try {
                // 本机地址
                WebSocketContainer container = ContainerProvider.getWebSocketContainer();
                String wsUrl = "ws://" + serverUrl + "/" + user;
                URI uri = URI.create(wsUrl);
                session = container.connectToServer(WebSocketClient.class, uri);
            } catch (DeploymentException | IOException e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 打开连接
         * @param session
         */
        @OnOpen
        public void onOpen(Session session) {
            System.out.println("打开");
            this.session = session;
        }
    
        /**
         * 接收消息
         * @param text
         */
        @OnMessage
        public void onMessage(String text) {
            System.out.println(text);
    
        }
    
        /**
         * 异常处理
         * @param throwable
         */
        @OnError
        public void onError(Throwable throwable) {
            throwable.printStackTrace();
        }
    
        /**
         * 关闭连接
         */
        @OnClose
        public void onClosing() throws IOException {
            System.out.println("关闭");
            session.close();
        }
    
        /**
         * 主动发送消息
         */
        public void send(String message) {
            this.session.getAsyncRemote().sendText(message);
        }
        public void close() throws IOException{
            if(this.session.isOpen()){
                this.session.close();
            }
        }
    
    
    }

    以上代码是实现客户端的关键。websocket.server.user配置。是我为了区分微服务中从哪个服务发出的。换句话说。比如我有库存服务。订单服务。那么websocket.server.user在application.yml中可以这样配置。websocket.server.user=storage@1。websocket.server.user=order@1。然后再服务端进行解析就知道。这个消息是从哪个服务发起的。

    这样把websocket单独做服务的主要目的是实现解耦,复用。让微服务划分更明确!

  • 相关阅读:
    Swing程序设计(4)JLabel标签和导入图片
    [MySQL]DQL,Data Query Language(数据查询语言)
    23..【摆脱list链表的束缚、让你爱上链表】
    汇编语言之源程序
    数据分析利器:XGBoost算法最佳解析
    算法-1.两数之和
    一个反向代理神器 ——Nginx Proxy Manager
    爬取头像的程序不好用了?那就再重新做一份咯
    Python爬虫与数据可视化源码免费领取
    【Spark的五种Join策略解析】
  • 原文地址:https://blog.csdn.net/saygood999/article/details/126013600