Java Websocket Client onmessage接收事件列表器

时间:2020-02-06 04:18:15

标签: java websocket java-websocket

我已经像这样创建了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);
    }
}

0 个答案:

没有答案