Я создал 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);
}
}