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储缓存