如何快速或轻型是协议的缓冲器?
-
19-08-2019 - |
题
是的协议的缓冲区。净会是轻量级/更快于远程处理(本SerializationFormat.二)?会不会有第一类支持对于它在语言/框架的条款?即这是透明地处理与远程处理/web服务?
解决方案
我很怀疑它永远不会有直接的语言支持,甚至框架支持 - 这是它与第三方库完好操控之类的话
我自己的Java代码的端口是明确的 - 你必须调用方法序列化/反序列化。 (有RPC存根将自动序列化/反序列化,但没有RPC实现尚未。)
马克Gravell的项目与WCF适合于非常漂亮,但 - 据我“M意识到,你只需要告诉它(一次)使用协议缓冲区序列化,其余的是透明的。
在速度方面,你应该看看马克Gravell的基准页。我的代码往往比他更快的是略有下降,但两者都多,比框架其他序列化/反序列化选项快得多。应该指出的是,协议缓冲区是非常有限的,以及 - 他们不尝试序列任意类型,仅支持的。我们将尽力支持更常见的数据类型(十进制,日期时间等)在便携方式(如自己的协议缓冲消息)的未来。
其他提示
一些性能和大小的指标上 这页.我没有乔恩的统计数据上存在的时刻,只是因为页面是一个小老(乔恩:我们必须解决那!)。
重新是透明的; 格式净 可以勾到WCF通过合同;注意,它起到很好地与MTOM基本-http。这不起作用Silverlight,但是,由于Silverlight缺乏注点。如果你使用svcutil,还需要添加的一个属性类(通过一个分类)。
重新BinaryFormatter(远程);是的,这有充分的支持;你可以做到这一点只是通过一个微不足道的 ISerializable
执行情况(即刚刚叫的 Serializer
方法,同args).如果你使用 protogen
创建你的课程,然后它可以为你做:你可以启用,这在命令行通过的论点(这是不是默认为 BinaryFormatter
不工作的所有框架[CF等]).
请注意,对于非常小的物体(个单一的实例,等等)上的地方远程处理(IPC),原 BinaryFormatter
性能实际上是好的,但对于非微不足道的图表或远程链接(网络远程处理)格式网可以执行它很好。
我还应该注意到,协议的缓冲线的格式并不直接支持继承权;格式网可以欺骗本(同时保留的线的兼容性),但像序列化程序,需要声明的亚类。
为什么有两个版本?
欢乐的开放源,我猜测;-p乔恩和我有曾在联合项目之前,已经讨论了合并这两个,但事实是,他们目标的两个不同的方案:
- dotnet-protobufs (乔恩的)是港口现有的java版本。这意味着它有一个非常熟悉的API对任何人都已经使用java版本,它是建立在典型的java构造(生成器类,不可改变的数据类等)-几C#曲折。
- 格式净 (马克)是一个地重新实施的以下同样的二元格式(实际上,一项关键要求是就可以交换数据之间的不同格式),但是使用典型的。净语:
- 可变数据类中(没有建设者)
- 化件的具体细节表示,在属性(相当于
XmlSerializer
,DataContractSerializer
, 等)
如果你正在java和。净客户、Jon的可能是一个好的选择,对于熟悉API的两侧。如果你是纯粹的。网、格式网具有的优点-熟悉。净式API,但也:
- 你是不是 强迫 将合同第一(虽然可以,和一个码-发电机提供)
- 你可以重新使用现有的对象(事实上,
[DataContract]
和[XmlType]
课程往往可以使用没有任何变化) - 它完全支持继承(其它实现了在线通过欺骗封)(可能是唯一一个缓冲区协议的执行?注意,分类必须事先申报)
- 这超出它的方式插入与利用核心。净工具(
BinaryFormatter
,XmlSerializer
, WCF,DataContractSerializer
),使它的工作直接作为一个远程引擎。这大概是一个相当大的分裂主java干为乔恩的港口。
重新融合;我认为我们都是开放的,但它似乎不太可能你会想要两个功能组合,因为它们的目标这样的不同的要求。