在 Vert.X 中从 NetServer 流式传输 XML

Streaming XML from NetServer in Vert.X

我正在尝试制作一个 Verticle 而不是运行一个 TcpServer,它然后从传入连接异步读取 XML,将它接收到的所有 xml 存储到 PriorityQueue 中,然后广播 XML 来自队列的消息。

我正在使用从已接受的 NetSocket 连接读取传入数据的 NetServer,但我不知道如何通过 xml 解析流数据。如果我使用将 Buffer 转换为 String 的标准处理程序,我将被切断消息。 我已经设法通过创建一个由 XML 的结束标记分隔的 RecordParser 来使其主要工作,但这更像是一个创可贴。如果我在 Xml 消息之前得到很多错误数据,那将被包括在内。

当我使用 straight netty 时,它有一个 XMLFrameDecoder 选项可以工作,但是在 Vert.x 中有什么方法可以实现吗?

这是我目前所拥有的

@Override
public void start(Future<Void> startFuture) {
    NetServerOptions options = new NetServerOptions()
            .setPort(mPort)
            .setTcpKeepAlive(true);
    mServer = vertx.createNetServer(options);
    mServer.connectHandler(new Handler<NetSocket>() {
        @Override
        public void handle(NetSocket netSocket) {
            netSocket.handler(RecordParser.newDelimited("</root>", new Handler<Buffer>() {
                @Override
                public void handle(Buffer buffer) {
                    String xml = buffer.getString(0, buffer.length()) + "</root>";
                    XMLMessage message = new XMLMessage (xml);
                    System.out.println(xml);
                }
            }));
        }
    });
    mServer.listen();
}

如果您有任何建议,请告诉我。

Vert.x 中没有 RecordParser 可以完成与 Netty 的 XMLFrameDecoder 相同的工作。

尽管 integrate custom Netty servers 使用 Vert.x 编程模型是可能的。