c# - 如何通过套接字发送大的 xml 文件

标签 c# java xml sockets stream

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

最佳答案

几年前,我为一家使用体育有线服务的广播公司开发了一种解决方案,其工作方式正是如此。

他们的一些提示:

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

关于c# - 如何通过套接字发送大的 xml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9910794/

相关文章:

java - 在没有索引的情况下使用 Lucene 分析器 - 我的方法合理吗?

sql-server - 将对象保存到数据库的良好做法

xml - 当子节点满足一定条件时移除 XML 节点

c# - 空引用异常 - 使用 Element 和 XPath 的 XDocument

c# - coderush 下划线错误

c# - 尝试使用登录前握手确认时超时期限已过。 (一天只有几次)

c# - 以编程方式添加选项卡,C# 选项卡控件

java - 如何在一个请求中发送文件和重定向?

java - 全局 gradle 代理设置?

c# - 如何强制 Average 函数包含空值?