我已经像这样创建了Java Websocket客户端,从服务器广播的消息未正确传递到客户端,只有第一条消息出现,之后再没有消息出现。有什么办法可以通过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客户端=新的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) 公共类SimpleEchoSocket { 私有最终CountDownLatch closeLatch; @SuppressWarnings(“未使用”) 私人会话会话;
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);
}
}