通过Websockets将数据从Javafx-Client发送到EventBus

时间:2015-08-17 07:07:02

标签: javafx websocket event-bus vert.x

我在 Vert.x 中有一个Socket处理程序,我知道如何通过客户端到服务器(从Web浏览器到Web服务器)和服务器组件到EventBus发送数据-server-component时尚。

现在我有一个JavaFX-Client通过websockets连接到 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");
            //...
        }    
    }
}    

套接字连接到&#34; / chat / service&#34;。

现在我想使用此Websocket从 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();
        }
    // ...
    }
}

我现在可以发送&#34;命令&#34;喜欢 doAuthentification 通过WebSocket,然后,在服务器端,当收到该命令时,我可以使用EventBus进一步处理它。

从客户端使用它的正确方法是什么?想法?

1 个答案:

答案 0 :(得分:0)

由于您的应用程序打包为独立应用程序未在 Vert.x 实例中部署,因此您将无法调用事件总线,因为它是 Vert .x 特定功能。

您已经开始使用的方法是以标准方式,通过套接字或http与您的 Vert.x 应用程序进行通信(我建议使用HTTP和RESTful)应用程序样式),并通过一个入口点发送消息,该入口点稍后将被转移到适当的Verticle。

您可能需要配置许多基于路径的处理程序,可能在内部使用正则表达式捕获组,并让每个处理程序选择适当的模式来委派事件,而不是基于硬编码消息的单个处理程序。