我正在使用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)不起作用。如何处理?

最佳答案

您正在配置WebSocket Stomp桥,该桥允许使用Web套接字的客户端与Stomp服务器进行交互。但是,此客户端必须发送STOMP帧(并期望STOMP帧)。

通常:

当STOMP客户端连接到服务器时,调用connectEvent
启动STOMP事务时将调用beginEvent

如果您的Web套接字客户端未发送帧(CONNECTBEGIN ...),则不会调用回调。

您可以看到CONNECT框架here的示例。

关于java - 如何在vert-x中处理StompServerHandlers,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47602759/

10-09 04:09