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

最近用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);
    }
}
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

membalas semua(3)
巴扎黑

CountDownLatch(1) baharu.menunggu();

洪涛

Selepas menghantar mesej mengikut gelung logik anda, proses akan keluar. Ia adalah perkara biasa untuk sambungan terputus.

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();
        }
    }
}
洪涛

Pastikan urutan utama anda tidak pernah terkeluar, seperti rangka kerja web spring mvc, atau baris gilir menyekat Jika tiada mesej, ia akan sentiasa disekat untuk memastikan urutan utama tidak akan keluar. Thread.sleep(1000); Anda boleh cuba melaraskan ini kepada 1j untuk mensimulasikan program yang tidak pernah keluar

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan