Вы хотите работать с несколькими соединениями одновременно? В этом случае необходима хорошая асинхронная обработка сокетов, чтобы избежать одного потока на соединение.
В противном случае вам просто нужен анализатор XML, который может обрабатывать куски байтов за раз. Expat - канонический пример; если вы на Java, попробуйте XP . Эти типы синтаксических анализаторов XML будут запускать события, насколько это возможно, и буферизуют частичные строфы, пока не прибудут остальные.
Теперь, чтобы ответить на ваше утверждение об отсутствии уведомления о завершении строфы , это не совсем так. Важно не обрабатывать поток XML так, как если бы он представлял собой последовательность документов. Используйте следующий псевдокод:
stanza = null
while parser has more:
switch on token type:
START_TAG:
elem = create element from parser state
if stanza is not null:
add elem as child of stanza
stanza = elem
END_TAG:
parent = parent of stanza
if parent is not null:
fire OnStanza event
stanza = parent
Этот подход должен работать с анализатором событий на основе событий или по запросу. Требуется только удерживать один указатель состояния. Очевидно, вам также понадобится обрабатывать атрибуты, символьные данные, ссылки на сущности (например, & amp; и т. П.) И специальный тег stream: stream, но это должно помочь вам начать.