在Vert.X中从NetServer流XML

时间:2018-10-04 20:30:01

标签: java xml tcp vert.x

我想让Verticle运行TcpServer,然后再从传入连接中异步读取XML,将接收到的所有XML存储到PriorityQueue中,然后广播来自Queue的XML消息。

我正在使用从接受的NetSocket连接读取传入数据的NetServer,但我不知道如何通过xml解析流数据。如果我使用将Buffer转换为String的标准处理程序,则会截断消息。 我设法通过创建一个由XML的结束标签定义的RecordParser使其大部分工作,但这更多的是创可贴。如果要在Xml消息之前得到很多不良数据,则将其包括在内。

当我使用纯净货币时,它有一个可以工作的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();
}

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

1 个答案:

答案 0 :(得分:1)

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

尽管可以使用Vert.x编程模型来integrate custom Netty servers