Отправка данных из Javafx-клиента через веб-сокеты в EventBus

У меня есть обработчик Socket в Vert.x, и я знаю, как отправлять данные через EventBus в режиме клиент-сервер (из веб-браузера на веб-сервер) и сервер-компонент-сервер. комплектующие мод.

Теперь у меня есть JavaFX-клиент, подключенный к обработчику сокетов Vert.x через веб-сокеты:

public void start() {

    vertx.createHttpClient()
    .setHost(Main.SOCKET_SERVER)
    .setPort(8080)
    .connectWebsocket("/chat/service", new Handler<WebSocket>() {                   
        @Override
        public void handle(WebSocket websocket) {
            ws = websocket;  
            websocket.dataHandler(new Handler<Buffer>() {
                @Override
                public void handle(Buffer data) {
                    System.out.println("Received Data");
                }
            });

            //...
            // use ws for authentification
            ws.writeTextFrame("doAuthentification");
            //...
        }    
    }
}    

Сокет подключен к "/chat/service".

Теперь я хочу использовать этот веб-сокет для вызова различных служб из Vert.x. Я знаю, что EventBus не работает с JavaFX-Client.

На сервере:

ws.dataHandler(new Handler<Buffer>() {
    @Override
    public void handle(final Buffer data) {
        String text = data.toString();          
        if(text.contentEquals("doAuthentification")){
            logger.info("doAuthentification()");
            doAuthentification();
        }
    // ...
    }
}

Теперь я могу отправлять «команды», такие как doAuthentification, через WebSocket, затем на стороне сервера, и когда эта команда получена, я могу использовать EventBus для ее дальнейшей обработки.

Каким будет правильный способ использования его от клиента. Идеи?


person tonimaroni    schedule 17.08.2015    source источник
comment
Клиент JavaFX развертывается как verticle или как отдельное приложение?   -  person tmarwen    schedule 19.08.2015
comment
Привет. Это отдельное приложение. Не работает как вертикул.   -  person tonimaroni    schedule 19.08.2015


Ответы (1)


Поскольку ваше приложение упаковано как отдельное приложение, а не развернуто, как в экземпляре Vert.x, вы не сможете вызвать шину событий, поскольку это Vert.x< /em> конкретная функция.

Ваш метод будет, как вы уже пробовали, общаться с вашим приложением Vert.x стандартным способом, например, через сокет или http (я бы рекомендовал HTTP и стиль приложения RESTful) , и отправлять сообщения через точку входа, которые в дальнейшем будут переданы в соответствующие вершины.

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

person tmarwen    schedule 19.08.2015