为了账号安全,请及时绑定邮箱和手机立即绑定

websocket api开发客户端如何保持链接不断开,在没有数据传输的时候

websocket api开发客户端如何保持链接不断开,在没有数据传输的时候

哆啦的时光机 2019-02-18 22:39:32
最近用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); } }
查看完整描述

3 回答

?
动漫人物

TA贡献1815条经验 获得超10个赞

new CountDownLatch(1).await();

查看完整回答
反对 回复 2019-03-01
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

按照你的逻辑循环发送消息结束后,进程就退出了吧,连接断开是正常情况。

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);
            }
            
            //
            // wait/sleep
            //
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
查看完整回答
反对 回复 2019-03-01
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

要保证你的主线程一直不退出,例如spring mvc 的web框架,或者是一个阻塞的队列,没有消息就一直阻塞,保证主线程不会退出。Thread.sleep(1000);你可以尝试把这个调成1h,模拟一个永不退出的程序

查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 1249 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号