0

我使用 成功连接到本地 websocket 服务器tyrus,但onMessage没有调用该方法。我将 Fiddler 设置为中间的代理,我看到服务器用两条消息响应,但是,它们没有在我的代码中打印出来。我或多或少地修改了示例代码:
消息onOpen被打印出来

public static void createAndConnect(String channel) {

    CountDownLatch messageLatch;
    try {
        messageLatch = new CountDownLatch(1);

        final ClientEndpointConfig cec = ClientEndpointConfig.Builder.create().build();
        ClientManager client = ClientManager.createClient();
        client.connectToServer(new Endpoint() {

            @Override
            public void onOpen(Session session, EndpointConfig config) {
                System.out.println("On Open and is Open " + session.isOpen());

                session.addMessageHandler((Whole<String>) message -> {
                    System.out.println("Received message: " + message);
                    messageLatch.countDown();
                });
            }
        }, cec, new URI("ws://192.168.1.248/socket.io/1/websocket/" + channel));
        messageLatch.await(5, TimeUnit.SECONDS); //I also tried increasing timeout to 30sec, doesn't help 
    } catch (Exception e) {
        e.printStackTrace();
    }

}

Fiddler 中的 Web Socket 响应

4

1 回答 1

1

这是一个已知问题 - 如果您将 lambda 重写为匿名类或使用Session#addMessageHandler(Class, MessageHandler)(您可以在此处使用 lambda),它将起作用。

于 2017-05-18T07:39:48.783 回答