【问题标题】:How to send a large xml file through sockets如何通过套接字发送大型 xml 文件
【发布时间】:2012-03-28 15:28:05
【问题描述】:

我必须通过套接字发送大量的 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. 还有别的吗?

【问题讨论】:

  • 您是否考虑过在 Stream 上使用 XmlReader?

标签: c# java xml sockets stream


【解决方案1】:

几年前,我为一家使用完全以这种方式工作的体育有线服务的广播公司开发了一个解决方案。

他们的一些提示:

  1. 确保每条消息都有唯一的标识符。它可以像文档元素中的 guid 属性一样简单。
  2. 多次传输消息(除非这是点对点,并且您的解决方案中内置了确认)。客户端应维护成功处理消息的唯一标识符的哈希表,并忽略它已处理的重复项。
  3. 保持您的消息小。您真的需要所有“数据”节点都在一条消息中吗?您不能将它们作为单独的消息发送吗?
  4. 用不可行的 XML 字符分隔消息。 CR 和 LF 不起作用。此服务使用 {0x02} 字节来分隔消息。在客户端使用它来查找 XML 文档之间的分隔点。

【讨论】:

  • 非常感谢。多次发送消息 - 我可以。在客户端,我可以借助不可行的 xml 字符来处理数据。
  • @Elena - 很高兴为您提供帮助。祝你的项目好运。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2017-03-14
  • 2013-09-27
  • 2011-02-24
相关资源
最近更新 更多