【问题标题】:Using GZipStream for Client/Server Async Communication使用 GZipStream 进行客户端/服务器异步通信
【发布时间】:2011-10-27 20:49:22
【问题描述】:

我有具有多个客户端和单个服务器的客户端/服务器系统(使用 Socket),它每秒钟在所有客户端上发送 xml 数据。

XML 数据的大小始终在 1 - 18000 个字符之间,服务器需要同时将这些 XML-Datas 发送给所有客户端。

现在我想知道,如何让服务器和客户端之间的通信更快。

也许我会问不止一个问题,但我真的被困在这一点上,我不能再继续了。

  • 我应该在发送前压缩每个 XML 数据吗?
  • 我应该序列化 XML 数据吗? (也许xml数据大小会减少)
  • 是否需要将每个 XML 数据转换为 byte[] 数组(用于缓冲区), 因为必须同时为所有客户端进行通信。

谢谢!

【问题讨论】:

    标签: c# client client-server


    【解决方案1】:

    如果您当前正在迭代连接的客户端,则可以使用具有内置发布-订阅拓扑的中间层。 0MQ 能够让单个发布者非常有效地发送给 n 个订阅者,并且具有 C# 绑定。您还可以按照您的建议在发送之前压缩邮件。

    【讨论】:

    • 有 0MQ 压缩基准列表吗?我对0QM很陌生。我可以将它用于我的系统吗?
    • 来自文档:“这是类固醇上的套接字”。它是一种中间件,能够解决网络通信中的很多困难。 “ØMQ (ZeroMQ, 0MQ, zmq) 看起来像一个可嵌入的网络库,但它的作用就像一个并发框架。它为您提供了跨进程、进程间、TCP 和多播等各种传输方式承载整个消息的套接字。您可以连接具有扇出、发布-订阅、任务分配和请求-回复等模式的 N 对 N 套接字。它的速度足以成为集群产品的结构。它可以为您做很多事情,让您的生活更轻松。
    【解决方案2】:

    如果您使用WCF,您可以轻松集成 GZip 压缩。

    在这里查看:WCF Compression over HTTP sample

    【讨论】:

    • 抱歉忘了说,这是一个使用socket (tcp)的应用程序
    【解决方案3】:

    假设您在 Intranet 上工作,我建议您 multicast 您的 xml 数据。这样,您的服务器将每秒发送一个 xml 数据副本(而不是为 N 个客户端发送 N 个数据副本)

    【讨论】:

    • 如果我不在 Intranet 上工作怎么办?是否有另一种方式来多播 xml 数据?
    • 这取决于您的 ISP,很可能没有。
    猜你喜欢
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多