Как отправить большой XML-файл через сокеты - PullRequest
2 голосов
/ 28 марта 2012

Я должен отправить большое количество XML-данных через сокеты.Пример файла xml (сервер создает такой файл):

<message>
 <data>
  <param1>12345</param1>
  <param2>234</param2>
 </data>
...
 <data>
  <param1>321</param1>
  <param2>34234</param2>
 </data>
</message>

И тогда клиент получает такие данные.Клиент должен проанализировать этот файл и вставить параметры в дб.

Клиент получает эти данные по частям (размер в байтах):

byte[] receivedData = new byte[1024];
int receivedBytesLen = streamFromServer.read(receivedData);

Как я могу обработать эти данные?

  1. Например, если я прочитал все данные файла в переменную на стороне клиента, а затем обработал.Я думаю, что это не хорошо - могут быть проблемы (большой объем данных).
  2. Записать все данные во временный файл и затем обработать?Создать файл, удалить ...
  3. Читать и обрабатывать одновременно.Но xml не заполнен.
  4. Что-то еще?

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

Несколько лет назад я разработал решение для вещательной компании, которая пользовалась услугой спортивного телеканала, которая работала ТОЧНО таким образом.

Несколько советов из них:

  1. Убедитесь, что каждое сообщение имеет уникальный идентификатор. Это может быть что-то такое же простое, как атрибут guid в элементе документа.
  2. Передавайте сообщения несколько раз (если только это не точка-точка и у вас нет подтверждения, встроенного в ваше решение). Клиент должен поддерживать хэш-таблицу уникальных идентификаторов успешно обработанных сообщений и игнорировать дубликаты, которые уже обработаны.
  3. Держите ваши сообщения маленькими. Вам действительно нужно, чтобы все узлы данных были в одном сообщении? Разве вы не можете отправлять их как отдельные сообщения?
  4. Разделяйте свои сообщения нежизнеспособным символом XML. CR и LF не будут работать. Эта служба использовала {0x02} байтов для разделения сообщений. Используйте это на стороне клиента, чтобы найти точки разделения между документами XML.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...