通过 Websockets 从 Javafx 客户端发送数据到 EventBus
Send data from a Javafx-Client over Websockets to EventBus
我在 Vert.x 中有一个套接字处理程序,我知道如何在客户端到服务器(从 Web 浏览器到 Web 服务器)中通过 EventBus 发送数据) 和服务器组件到服务器组件的方式。
现在我有一个 JavaFX 客户端通过 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");
//...
}
}
}
套接字连接到“/chat/service”。
现在我想使用这个 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();
}
// ...
}
}
我现在可以通过 WebSocket 发送 "commands",比如 doAuthentification,然后,在服务器端,当收到该命令时,我可以使用 EventBus 来处理它更进一步。
从客户端使用它的正确方法是什么。想法?
由于您的应用程序被打包为一个独立的应用程序,而不是像在 Vert.x 实例中那样部署,您将无法调用事件总线,因为这是一个 Vert.x 特定功能。
你的方法是,正如你已经尝试过的,以标准方式与你的 Vert.x 应用程序通信,例如通过套接字或 http (我会推荐 HTTP 和 RESTful 应用程序样式),并通过一个入口点发送消息,该入口点稍后将被传输到适当的 Verticle。
您可能需要配置许多基于路径的处理程序,可能在内部使用正则表达式捕获组,并让每个处理程序选择适当的模式来委托事件,而不是让一个处理程序基于硬编码消息。
我在 Vert.x 中有一个套接字处理程序,我知道如何在客户端到服务器(从 Web 浏览器到 Web 服务器)中通过 EventBus 发送数据) 和服务器组件到服务器组件的方式。
现在我有一个 JavaFX 客户端通过 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");
//...
}
}
}
套接字连接到“/chat/service”。
现在我想使用这个 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();
}
// ...
}
}
我现在可以通过 WebSocket 发送 "commands",比如 doAuthentification,然后,在服务器端,当收到该命令时,我可以使用 EventBus 来处理它更进一步。
从客户端使用它的正确方法是什么。想法?
由于您的应用程序被打包为一个独立的应用程序,而不是像在 Vert.x 实例中那样部署,您将无法调用事件总线,因为这是一个 Vert.x 特定功能。
你的方法是,正如你已经尝试过的,以标准方式与你的 Vert.x 应用程序通信,例如通过套接字或 http (我会推荐 HTTP 和 RESTful 应用程序样式),并通过一个入口点发送消息,该入口点稍后将被传输到适当的 Verticle。
您可能需要配置许多基于路径的处理程序,可能在内部使用正则表达式捕获组,并让每个处理程序选择适当的模式来委托事件,而不是让一个处理程序基于硬编码消息。