我有一个带有基于 Mono 的 C# 客户端和 Python 服务器的程序,它们通过 TCP/IP 套接字进行通信。消息主要使用二进制格式,但每条消息的最大部分通常是嵌入的 UTF-8 字符串(英文)。每条消息通常都很短(不到 100 字节),但有些消息可能更长(最多 64K)。交换了大量数据,我想通过在传输数据时压缩数据来减少消息大小和带宽使用。
我最初的研究没有发现任何明显兼容这两个标准库的东西。Python 有一个zlib库,但我不能使用 C# 的DeflateStream或 GZipStream(因为它们需要一个我没有可用的外部 DLL),而且它似乎不适用于 SharpZipLib 的 ZipOutputStream(发出“错误 -3 - 不正确标头”响应)。(那些不使用 Mono 的人可能会有更多的运气 - 请参阅下面的 Duncan 的回答。)
我有兴趣了解在此通信链路上启用压缩的简单方法,请记住,任何可能易于用一种语言实现的解决方案都需要在另一种语言中具有等价物。我会接受专门针对 UTF-8 字符串而不是二进制消息的解决方案,尽管首选是压缩整个字节流。
理想情况下,我希望将外部依赖项保持在最低限度,但我意识到这可能不切实际。
更新:在尝试使用 SharpZipLib 并在 Python 解码方面遇到重复错误后,我真的可以使用已知有效的代码提出具体建议,而不仅仅是针对一种语言或另一种语言的压缩库的建议。