【问题标题】:What is the better performing / more compact way to send binary data to a server in WP7在 WP7 中将二进制数据发送到服务器的性能更好/更紧凑的方式是什么
【发布时间】:2011-04-01 18:52:27
【问题描述】:

鉴于 Windows Phone 7 中没有直接的 tcp / 套接字限制,我想知道性能开销最小和/或可以以最紧凑的方式发送它的方式是什么。 我想我可以使用 HTTP(可能使用 HTTPWebRequest)将数据作为文件发送并将其编码为 Base64,但这会显着增加传输大小。我可以使用 WCF,但性能开销也会很大。 有没有一种方法可以在不编码的情况下发送纯二进制数据,或者有什么更快的方法?

【问题讨论】:

  • 您是否已经有一些使用 WCF 编码的东西太慢了,或者您是否首先担心性能?
  • 我正在从 Windows Mobile 6.5 迁移。它最初用 WCF 发送东西,速度慢得令人难以忍受,然后用 Base64 发送,它仍然很慢。它使用套接字和二进制表示非常好,但这不再是一种选择。所以,是的,众所周知,性能是一个问题。实际上功耗不仅仅是性能。因此,无论是减少密集度还是更紧凑地进行操作都是一种胜利。

标签: networking windows-phone-7 binary-data data-transfer


【解决方案1】:

WP7 上的网络通信目前仅限于 HTTP。

考虑到这一点,您将不得不允许将 HTTP 标头作为传输的一部分包含在内。你可以通过自己不添加任何额外的标题来帮助保持这个小规模(除非你真的必须这样做)。

就消息的正文而言,您可以尽量减少内容。

将您的数据格式化为 JSON 通常会小于 XML。

但是,如果您的数据始终采用特定格式,您可以将其作为原始数据包含在内。即,如果您知道数据的前 n 位/字节/字符代表一个事物,那么接下来的 y 位/字节/字符代表另一个事物,等等。您可以在没有任何(字段)标识符的情况下格式化您的数据。这取决于你需要什么。

【讨论】:

  • 听起来不错,它始终采用相同的格式。如何将其作为原始数据发送?
  • @cloudraven 我只是通过 HttpWebRequest 发布数据
【解决方案2】:

如果你想发送二进制数据,那么肯定有些人一直在使用原始套接字 - 请参阅 Connect to attached pc from WP7 by opening a socket to localhost

但是,除非你想编写自己的套接字服务器,否则 HTTP 非常方便。正如 Matt 所说,您可以在 HTTP 请求中包含二进制内容。为此,您可以使用标题:

Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-Length: your length

要实际设置这些标头,您可能需要将其作为多部分消息发送...请参阅Upload files with HTTPWebrequest (multipart/form-data) 之类的问题

AppHub 论坛上有一些出色的示例代码 - http://forums.create.msdn.com/forums/p/63646/390044.aspx - 展示了如何将二进制照片上传到 Facebook。

除非您的数据非常大,否则可能更容易接受 Base64 编码的 4/3 命中 :)(还有其他更高效的编码类型,例如 Ascii85 - http://en.wikipedia.org/wiki/Ascii85

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 2010-10-26
    • 2012-09-10
    相关资源
    最近更新 更多