最近用java websocket开发的客户端程序,在和服务端链接通后,在数据传输完毕后,客户端自动关闭了链接,如何能保持链接不断开
这个是客户端的启动类,在循环完毕后,会自动断开和服务器的链接,开始怀疑是session超时问题,然后设置了下maxsession,却依然在没有数据传输后立刻断开了链接
public class ClientStart {
public static void main(String[] args){
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
MyClient client = new MyClient();
container.connectToServer(client, new URI("ws://localhost:8088/websocket"));
// container.setDefaultMaxSessionIdleTimeout(5000L);
int turn = 0;
while(turn++ < 10){
client.send("client send: " + turn);
Thread.sleep(1000);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
MyClient也放上去吧:
@ClientEndpoint
public class MyClient {
private static Logger logger = LoggerFactory.getLogger(MyClient.class);
private Session session;
@OnOpen
public void open(Session session){
logger.info("Client WebSocket is opening...");
this.session = session;
}
@OnMessage
public void onMessage(String message){
logger.info("Server send message: " + message);
}
@OnClose
public void onClose(){
logger.info("Websocket closed");
}
/**
* 发送客户端消息到服务端
* @param message 消息内容
*/
public void send(String message){
this.session.getAsyncRemote().sendText(message);
}
}
새로운 CountDownLatch(1).await();
논리 루프에 따라 메시지를 보낸 후 프로세스가 종료됩니다. 연결이 끊어지는 것은 정상입니다.
으아아아spring mvc의 웹 프레임워크나 차단 대기열과 같은 메인 스레드가 절대 종료되지 않도록 하세요. 메시지가 없으면 메인 스레드가 종료되지 않도록 항상 차단됩니다. Thread.sleep(1000); 절대 종료되지 않는 프로그램을 시뮬레이션하기 위해 이를 1h로 조정해 볼 수 있습니다