谷歌协议缓冲区与JSON:C++到C#通信
Google Protocol Buffers Vs JSON: C++ to C# communication
我有两个通过TCP套接字进行通信的应用程序。目前,这些应用程序都是本地的,但将来服务器应用程序将在云上运行(Amazon EC2 实例)。
服务器应用程序是用C++
编写的客户端应用程序是用C#
编写的
我正在将一个对象从服务器发送到具有以下属性的客户端:
Guid Id
uint8* ImageData
虽然,我可能希望将来添加额外的属性。但是,我将尝试使此对象尽可能小,因为延迟在这里很重要。
现在,我目前正在使用JSON在程序之间进行通信,但我想知道Google协议缓冲区(GPB),因为虽然JSON很好用,而且是人类可读的,但它确实有很大的开销,从外观上看,导致通信明显延迟。
我正在寻找一种在客户端和服务器应用程序之间进行通信的更有效的方法。
GPB与JSON相比如何?有没有人有过高性能使用 GPB 的经验?还有其他协议可能更适合这里吗?
这些参考资料将对您有所帮助。
https://google.github.io/flatbuffers/md__benchmarks.html
https://capnproto.org/news/2014-06-17-capnproto-flatbuffers-sbe.html
有一个C++实现,用于在 github 上将 JSON 转换为 protobuf/从 protobuf 转换。
有很多事情我们不知道:
uint8* ImageData
通常有多大?- 如何将二进制数据序列化为 JSON
- 什么是可用带宽
- 什么是平均和预期数据速率
我想说的是,只有在重要时才需要担心 JSON 开销,否则为什么要更改任何内容。您提到了延迟,但只有当您要发送的数据多于可用带宽时,延迟才会受到影响。
对于您极其简单的情况,我什至不会使用 JSON,而是手动将其序列化为二进制 blob,除非您预计将来您的协议将显着发展。
相关文章:
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 是否可以使用winusb同时与多个相同的usb设备进行通信
- 混淆了如何使用IDL与Ethovision进行通信
- C++ Boost::asio串行通信与Arduino无法写入
- 我是否需要包含隐式使用/与 WindowsAPI 通信"Windows.h"?
- 通过TCP的PvP通信问题
- C++一个线程如何正确通信其任务已完成?
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 删除功能不适用于串行通信后多个循环中的多个实例
- 网站和C++程序在同一台 Linux PC 上的通信
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 使用 pybind11 共享 MPI 通信器
- 进程间通信堆内存
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- C++ 两台不同机器之间通过wifi进行套接字通信
- 提升::Asio 异步聊天客户端停止与服务器通信
- 与SPI NAND闪存(STM32L4,QSPI)的通信问题
- 线程之间的通信不起作用 - C++
- 如何在此功能中没有通信过程?
- MPI 集合通信中的指针分配