Я пытаюсь создать Verticle, чем запускает TcpServer, который затем асинхронно считывает XML из входящих подключений, сохраняет весь XML, который он получает, в PriorityQueue, а затем транслирует XML-сообщения из очереди.
Я использую NetServer, который считывает входящие данные из принятых подключений NetSocket, но я не знаю, как анализировать данные потока по xml. Если я использую стандартный обработчик, который преобразует Buffer в String, я получаю обрезаемые сообщения. Мне удалось заставить его в основном работать, создав RecordParser, который ограничивает конечный тег XML, но это скорее бандаж. Если бы я получил много неверных данных перед сообщением Xml, это было бы включено.
Когда я использую прямую 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, который выполнял бы ту же работу, что и XMLFrameDecoder Netty.
Однако возможно интегрировать собственные серверы Netty с моделью программирования Vert.x.