Сервер Java WebSocket - отправка сообщения клиенту

У меня есть решение для веб-сокетов клиент / сервер, но, что довольно необычно, я бы хотел, чтобы сервер отправлял обновление клиенту, непосвященному. При отправке обновлений я также хотел бы избежать использования какого-либо интервального таймера, а скорее, чтобы они запускались событием на стороне сервера.

Я вижу, что вопрос здесь уже задавался, но, похоже, ни у кого нет элегантного решения.

Как реализовать отправку клиенту с помощью Java EE 7 WebSockets?

В том же решении пользователь предлагает предложение, подобное приведенному ниже, но мне интересно, как вызвать метод sendMessage (String message) из другого класса?

    @WebSocket
    public static class EchoSocket
    {
        private org.eclipse.jetty.websocket.api.Session session;
        private org.eclipse.jetty.websocket.api.RemoteEndpoint remote;

        @OnWebSocketClose
        public void onWebSocketClose(int statusCode, String reason)
        {
            this.session = null;
            this.remote = null;
            System.out.println("WebSocket Close: {} - {}" + statusCode + " : " + reason);
        }

        @OnWebSocketConnect
        public void onWebSocketConnect(org.eclipse.jetty.websocket.api.Session session)
        {
            this.session = session;
            this.remote = this.session.getRemote();
            System.out.println("WebSocket Connect: {}" + session.toString());
            this.remote.sendStringByFuture("You are now connected to " + this.getClass().getName());
        }

        @OnWebSocketError
        public void onWebSocketError(Throwable cause)
        {
            System.out.println("WebSocket Error" + cause.getLocalizedMessage());
        }

        @OnWebSocketMessage
        public void onWebSocketText(String message)
        {
            if (this.session != null && this.session.isOpen() && this.remote != null)
            {
                System.out.println("Echoing back text message [{}]" + message);
                this.remote.sendStringByFuture(message);
            }
        }

        public void sendMessage(String message) {
            this.remote.sendStringByFuture(message);
        }

    }

Любые предложения будут очень признательны.


person dre    schedule 17.02.2017    source источник


Ответы (1)


Чтобы сообщить всем, кому интересно, в моем конкретном случае я поместил всю необходимую реализацию в метод onWebSocketConnect. Я не думаю, что это элегантное решение, но оно решило проблему для меня. Мое приложение было довольно "однажды отключенным" и несвободным, и я бы не рекомендовал его в контексте обычного клиент-серверного веб-приложения.

person dre    schedule 21.03.2017