vert-x中如何处理StompServerHandlers
How to deal with StompServerHandlers in vert-x
我正在使用 vert-x 3.5.0,我想将 StompServer 用作 WebSocket 服务器
我的 java 代码如下:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;
import io.vertx.ext.stomp.StompServer;
import io.vertx.ext.stomp.StompServerHandler;
import io.vertx.ext.stomp.StompServerOptions;
StompServer server = StompServer.create(vertx, new StompServerOptions()
.setPort(-1)
.setWebsocketBridge(true)
.setWebsocketPath("/stomp"))
.handler(StompServerHandler.create(vertx)
.receivedFrameHandler(event -> {
LOG.info(String.format("frame is %s", event.frame().getBodyAsString()));
})
.beginHandler(event -> {
LOG.info("Begin event");
})
.connectHandler(event -> {
LOG.info("Connect event");
})
.subscribeHandler(event -> {
LOG.info("Subscribe event");
}));
vertx.createHttpServer(
new HttpServerOptions().setWebsocketSubProtocols("v10.stomp, v11.stomp, v13.stomp")
)
.websocketHandler(server.webSocketHandler())
.listen(8080);
服务器运行可以接收握手请求和消息。我从 websocket 客户端和扩展服务器日志中看到它
Server received request: /stomp
[id: 0x1f899ae3, L:/127.0.0.1:8080 - R:/127.0.0.1:42550] WebSocket version V13 server handshake
WebSocket version 13 server handshake key: Qe8G85Aw1PwuQbWKPyJSrg==, response: VQVnKr2Jp8RuK/vltKb7XqBiMTU=
Decoding WebSocket Frame opCode=1
Decoding WebSocket Frame length=7
但是声明的处理程序(receivedFrameHandler、beginHandler、connectHandler、subscribeHandler)不工作。如何应对?
您正在配置允许使用 Web 套接字的客户端与 Stomp 服务器交互的 WebSocket Stomp 桥。但是,此客户端必须发送 STOMP 帧(并期望 STOMP 帧)。
通常:
当STOMP客户端连接到服务器时调用connectEvent
当您开始 STOMP 事务时,将调用 beginEvent
。
如果您的网络套接字客户端未发送帧(CONNECT
、BEGIN
...),则不会调用回调。
您可以查看 CONNECT
框架 here 的示例。
我正在使用 vert-x 3.5.0,我想将 StompServer 用作 WebSocket 服务器
我的 java 代码如下:
import io.vertx.core.AbstractVerticle;
import io.vertx.core.http.HttpServerOptions;
import io.vertx.core.logging.Logger;
import io.vertx.core.logging.LoggerFactory;
import io.vertx.ext.stomp.StompServer;
import io.vertx.ext.stomp.StompServerHandler;
import io.vertx.ext.stomp.StompServerOptions;
StompServer server = StompServer.create(vertx, new StompServerOptions()
.setPort(-1)
.setWebsocketBridge(true)
.setWebsocketPath("/stomp"))
.handler(StompServerHandler.create(vertx)
.receivedFrameHandler(event -> {
LOG.info(String.format("frame is %s", event.frame().getBodyAsString()));
})
.beginHandler(event -> {
LOG.info("Begin event");
})
.connectHandler(event -> {
LOG.info("Connect event");
})
.subscribeHandler(event -> {
LOG.info("Subscribe event");
}));
vertx.createHttpServer(
new HttpServerOptions().setWebsocketSubProtocols("v10.stomp, v11.stomp, v13.stomp")
)
.websocketHandler(server.webSocketHandler())
.listen(8080);
服务器运行可以接收握手请求和消息。我从 websocket 客户端和扩展服务器日志中看到它
Server received request: /stomp
[id: 0x1f899ae3, L:/127.0.0.1:8080 - R:/127.0.0.1:42550] WebSocket version V13 server handshake
WebSocket version 13 server handshake key: Qe8G85Aw1PwuQbWKPyJSrg==, response: VQVnKr2Jp8RuK/vltKb7XqBiMTU=
Decoding WebSocket Frame opCode=1
Decoding WebSocket Frame length=7
但是声明的处理程序(receivedFrameHandler、beginHandler、connectHandler、subscribeHandler)不工作。如何应对?
您正在配置允许使用 Web 套接字的客户端与 Stomp 服务器交互的 WebSocket Stomp 桥。但是,此客户端必须发送 STOMP 帧(并期望 STOMP 帧)。
通常:
当STOMP客户端连接到服务器时调用connectEvent
当您开始 STOMP 事务时,将调用 beginEvent
。
如果您的网络套接字客户端未发送帧(CONNECT
、BEGIN
...),则不会调用回调。
您可以查看 CONNECT
框架 here 的示例。