我想让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();
}
如果您有任何建议,请告诉我。
答案 0 :(得分:1)
Vert.x中没有RecordParser
可以完成与Netty的XMLFrameDecoder
相同的工作。
尽管可以使用Vert.x编程模型来integrate custom Netty servers。