2009-10-21 65 views
0

我有很多的数据是这样 1:0x00a4c7d9fb3849 ...
2:0x79821309bd789c7689c97 ...
3:0x0178dce67fe898 ...如何通过网络快速发送数据?

他们是100超过每秒和速度是最重要的事情(网络总是很忙)。

我应该使用什么来传输我的数据(tcp/ip,管道,通过等)?
我应该如何序列化它(BinaryFormatter,Xml,用户定义或任何更好的建议)?

+0

数据的时间关键性如何?我会试图批量处理数据,也许每秒都会发送一批数据,这样可以最大限度地减少每个数据包将要发送的标题信息中的浪费。 – Lazarus 2009-10-21 15:03:58

回答

1

如果您发送大量数据,并且数据不重要,那么UDP是最佳选择。但是,这可能会丢失数据包(您可能会丢失数据集中的一个数据集)。如果您的数据正在更新实时图表,这通常很好,因为缺失值并不重要。

但是,如果丢失数据很关键,那么TCP/IP将是您通过网络发送数据的最佳选择。鉴于数据的高速率,您最好使用自己的用户定义二进制格式,并且只发送/接收原始字节。使用Xml会非常烦人(这意味着更多的开销)。即使BinaryFormatter会增加一些开销,因为序列化往往会增加一点点,而不是绝对必要的。

+0

你知道用户定义序列化的一些好方法吗? 我可以使用一个结构来发送数据,但数据长度是可变的,我不能识别它们。 – Behrooz 2009-10-21 15:00:13

+0

通常,对于简单的字符串,最简单的选择是将字符串长度(字节)作为int发送,然后将字符串作为字节发送。必要时重复。不过,这种方式需要TCP,因为你需要确保你得到正确的数据包排序。 – 2009-10-21 15:01:56

+0

谢谢。这应该工作。 – Behrooz 2009-10-21 15:31:39

0

每秒100个这样的字符串看起来不太像一个问题(或者字符串必须很长)。

二进制总是比它的字符串代表更浓缩。你甚至可以先打包(使用zip或其他任何东西)

如果你想完全控制发送,TCP/IP将是一个不错的选择。

+0

他们至少10KBytes长,至少有30个客户端。 – Behrooz 2009-10-21 15:29:10

0

这看起来像二进制数据(例如,可以打包到byte []而不是使用字符串的数据)。为了获得最佳效率,您可以在TCP/IP(使用TCP,甚至是UDP)的基础上设计自己的协议,甚至可以即时压缩数据,如果网络负载是一个大问题。确保您不会发送很多小块,而是通过网络发送较大的块(例如1400个字节可能是一个很好的大小)。

1

100秒一秒可能不会像你想象的那么糟糕。

如果每个都是100个字节(100个数字应该适合,没问题),100×100是10000个字节秒或10Kbps。

我会使用我最熟悉的任何东西,并担心速度,如果第一个解决方案不起作用。您构建第一个解决方案的想法将使构建第二个解决方案变得更加容易,并且您可以更快地或在同一时间获得最终产品,除非较少受挫。