Java Websocket Client onmessage получатель списка событий - PullRequest
0 голосов
/ 06 февраля 2020

Я создал Java клиент веб-сокета следующим образом: сообщения, передаваемые с сервера, не поступают на клиент правильно, после этого приходит только первое сообщение, которое не приходит. Есть ли способ реализовать событие «Получено сообщение» через WebSocketClient

import org.eclipse.jetty.websocket.api.Session;
import org.eclipse.jetty.websocket.api.StatusCode;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
import org.eclipse.jetty.websocket.api.annotations.WebSocket;
import org.eclipse.jetty.websocket.client.ClientUpgradeRequest;
import org.eclipse.jetty.websocket.client.WebSocketClient;

Я реализовал клиентскую веб-сокет, как показано ниже. WebSocketClient client = new WebSocketClient (); SimpleEchoSocket socket = new SimpleEchoSocket ();

    try
    {
        client.start();
        URI echoUri = new URI(destUri);
        ClientUpgradeRequest request = new ClientUpgradeRequest();
        client.connect(socket, echoUri, request);
        socket.awaitClose(5000, TimeUnit.SECONDS);

    }
    catch (Throwable t)
    {
        getLogger().info("Socket Throwable: " + t.getMessage());
    }
    finally
    {
        try
        {
            getLogger().info("Socket stop");
            client.stop();
        }
        catch (Exception e)
        {
            getLogger().info("Socket Exception: " + e.getMessage());
        }
    }

Код SimpleSocket. java выглядит следующим образом

@ WebSocket (maxTextMessageSize = 64 * 1024) publi c класс SimpleEchoSocket {private final CountDownLatch closeLatch; @SuppressWarnings ("unused") закрытый сеанс сеанса;

    public SimpleEchoSocket()
    {
        this.closeLatch = new CountDownLatch(1);
    }

    public boolean awaitClose(int duration, TimeUnit unit) throws InterruptedException
    {
        return this.closeLatch.await(duration, unit);
    }

    @OnWebSocketClose
    public void onClose(int statusCode, String reason)
    {
        this.session = null;
        this.closeLatch.countDown(); // trigger latch
    }

    @OnWebSocketConnect
    public void onConnect(Session session)
    {
        this.session = session;
        try
        {
            Future<Void> fut;
            fut = session.getRemote().sendStringByFuture("Hello from client");
            fut.get(2, TimeUnit.SECONDS); // wait for send to complete.

            fut = session.getRemote().sendStringByFuture("Thanks for the conversation.");
            fut.get(2, TimeUnit.SECONDS); // wait for send to complete.
        }
        catch (Throwable t)
        {
            getLogger().info("onConnect 2" + t.getMessage());
        }
    }

    @OnWebSocketMessage
    public void onMessage(String msg)
    {
        getLogger().info("Message received:" + msg);
        if (msg.contains("Thanks"))
        {
            session.close(StatusCode.NORMAL, "I'm done over");
        }
    }

    @OnWebSocketError
    public void onError(Throwable cause)
    {
        getLogger().info("WebSocket Error: " + cause.getCause());
        cause.printStackTrace(System.out);
    }
}
...