zoukankan      html  css  js  c++  java
  • 基于Java API for WebSocket (JSR-356)的标准websocket客户端

    maven依赖

    springboot

     <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    import xxx.service.CacheService;
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.PreDestroy;
    import javax.websocket.ClientEndpoint;
    import javax.websocket.ContainerProvider;
    import javax.websocket.DeploymentException;
    import javax.websocket.OnClose;
    import javax.websocket.OnError;
    import javax.websocket.OnMessage;
    import javax.websocket.OnOpen;
    import javax.websocket.Session;
    import javax.websocket.WebSocketContainer;
    import java.io.IOException;
    import java.net.URI;
    import java.net.URISyntaxException;
    
    /***
     * 查询有多少空闲的worker
     * @author 
     */
    @ClientEndpoint
    @Slf4j
    @Component
    public class StatusSocketClient {
    
        private Session session;
    
        @Value("${ws.asr.status}")
        String statUrl;
    
        @Autowired
        CacheService cacheService;
    
    
        WebSocketContainer container;
    
        @PostConstruct
        public void init() throws URISyntaxException, IOException, DeploymentException {
            container = ContainerProvider.getWebSocketContainer();
            container.connectToServer(this, new URI(statUrl));
        }
    
        @PreDestroy
        public void destroy() throws IOException {
    
            //session.getAsyncRemote().sendText("EOS");
            if(session!= null)
            {
                if(session.isOpen())
                {
                    session.close();
                }
            }
        }
    
        @OnOpen
        public void open(Session session){
            log.info("Connected to Real-Time ASR Server Status Socket...");
            this.session = session;
        }
    
        @OnMessage
        public void onMessage(String json){
            log.info("Get a status message : " + json);
            cacheService.setCacheValue("asr.server.status",json);
        }
    
        @OnClose
        public void onClose(){
            log.info("Websocket closed");
        }
    
    
        @OnError
        public void onError(Session session, Throwable t) {
            t.printStackTrace();
        }
    
        public void send(String message){
            this.session.getAsyncRemote().sendText(message);
        }
    
        public void close() throws IOException {
            if(this.session.isOpen()){
                this.session.close();
            }
        }
    }

    ws.asr.status:ws://172.16.1.238:8888/client/ws/status

    他会从这个地址接收服务器状态信息,并且存redis储缓存

  • 相关阅读:
    TCP的流量控制
    [数组]数组元素分割
    [折半查找]排序数组中某个元素出现次数
    [队列]判断出栈序列
    [排序算法]堆排序
    [树结构]有实际用途的树的计算公式
    重写重要的库函数
    [链表]同时遍历两个链表
    [查找]二分查找
    [数组]数组元素置换方法
  • 原文地址:https://www.cnblogs.com/passedbylove/p/11935006.html
Copyright © 2011-2022 走看看