java - websocket api开发客户端如何保持链接不断开,在没有数据传输的时候
迷茫
迷茫 2017-04-18 10:32:59
[Java讨论组]

最近用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)
巴扎黑

new CountDownLatch(1).await();

PHP中文网

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

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();
        }
    }
}
PHP中文网

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

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号