0

私は現在、Glassfish 4 と「オンボード」実装で Websockets をテストしていますが、メッセージを送受信できませんが、Java EE 7 チュートリアル - メッセージの送受信How to build Java WebSocket Applications Using the JSR 356 APIなどのチュートリアルに従っています。シンプルなクライアントサーバー通信を実装したいので、私が持っているのは

サーバ:

@ServerEndpoint("/echotest")
public class Server {
    private static final Logger LOGGER = LoggerFactory.getLogger(Server.class);

    @OnOpen
    public void onOpen(Session session) {
        LOGGER.info("OnOpen invoked by Session '{}'.", session.getId());

        try {
            session.getBasicRemote().sendText("Hello Client!");
        } catch (IOException ex) {
            LOGGER.error("Message delivery failed.", ex);
        }
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        LOGGER.info("OnClose invoked by Session '{}'; Reason: {}.", session.getId(), closeReason.getReasonPhrase());
    }

    @OnMessage
    public void onMessage(Session session, String msg) {
        LOGGER.info("OnMessage invoked by Session '{}'; Message: {}.", session.getId(), msg);
    }
}

とクライアント:

@ClientEndpoint
public class Client {

    private static CountDownLatch latch;
    private static final Logger LOGGER = LoggerFactory.getLogger(Client.class);

    @OnOpen
    public void onOpen(Session session) {
        LOGGER.info("OnOpen invoked by Session '{}'.", session.getId());

        try {
            session.getBasicRemote().sendText("Hello Server!");
        } catch (IOException ex) {
            LOGGER.error("Message delivery failed.", ex);
        }
    }

    @OnClose
    public void onClose(Session session, CloseReason closeReason) {
        LOGGER.info("OnClose invoked by Session '{}'; Reason: {}.", session.getId(), closeReason.getReasonPhrase());
    }

    @OnMessage
    public void onMessage(Session session, String msg) {
        LOGGER.info("OnMessage invoked by Session '{}'; Message: {}.", session.getId(), msg);
    }

    public static void main(String[] args) {
        latch = new CountDownLatch(1);

        WebSocketContainer container = ContainerProvider.getWebSocketContainer();
        try {
            container.connectToServer(Client.class, new URI("ws://localhost:8080/Tstr/echotest"));
            latch.await();

        } catch (DeploymentException | URISyntaxException | InterruptedException | IOException e) {
            LOGGER.error("Connection error occured!", e);
        }
    }
}

Websocket が利用可能で、サーバーに接続できます (URI を変更すると 404 ハンドシェイク エラーが発生します) が、(サーバー側の) メソッドはどれも呼び出されず、取得している唯一のログ メッセージは次のとおりです。

INFO: OnOpen invoked by Session 'acc92925-6682-4414-9e78-cf60a624b014'.

クライアント側で。サーバーが少なくとも onOpen 呼び出しをログに記録することを期待します。このテストでは、(そのままの) Glassfish 4 と Netbeans 8 を使用します。

メッセージが交換されない理由を教えてください。

4

1 に答える 1

0

あなたのコードは私にとってはうまくいきますが、Logger (slf4j?) をこれに置き換える必要がありましたjava.util.logging.Logger

于 2014-06-18T11:27:24.960 に答える