我正在使用gSoap将遗留C++系统重构为面向服务的体系结构。我们有一些性能问题(非常大的XML),所以我的主管让我研究一下协议缓冲区。我做了,它看起来很酷(我们需要C++和Java支持)。但是,protocol buffer只是用于序列化的解决方案,现在我需要将其发送到Java前端。从C++和Java的角度来看,我应该使用什么来通过超文本传输协议(只是内部网络)发送这些序列化的内容?
PS。另一个人试图加速我们的gSoap解决方案,我只对协议缓冲区感兴趣。
发布于 2009-09-15 08:53:24
您甚至可以通过HTTP请求或在HTTP响应中发送二进制有效负载。只需将协议缓冲区的字节直接写入请求/响应,并确保将内容类型设置为"application/octet-stream“。客户端和服务器应该能够很容易地处理剩下的事情。我不认为你需要任何比这更特别的东西。
发布于 2009-09-15 14:37:59
ProtoBuf是一个二进制协议。它和肥皂不能很好地混合。我建议你要么坚持使用gSOAP,要么完全转换为ProtoBuf。
使用protoBuf,您可以使用如下所示的特殊格式定义协议,
message Product {
required string id = 1;
required string description = 2;
required int32 quantity = 3;
optional bool discontinued = 4;
}protoc工具可以用C++/Java/Python生成代码,因此您可以在一端对其进行序列化,在另一端进行反序列化。
正如您所看到的,ProtoBuf被设计为序列化单个对象。它没有提供SOAP提供的所有功能,比如头。为了解决这个问题,我们在ProtoBuf中使用了ProtoBuf。我们这样定义一个信封,
message Envelope {
enum Type {
SEARCH = 1;
SEARCH_RESPONSE = 2;
RETRIEVE = 3;
RETRIEVE_RESPONSE = 4;
}
required Type type = 1;
required bytes encodedMessage = 2;
message Header {
required string key = 1;
required bytes value = 2;
}
repeated Header headers = 3;
}encodedMessage是另一个序列化的ProtoBuf消息。SOAP头中的所有内容现在都归headers了。
发布于 2015-06-05 23:45:12
谷歌前端更喜欢application/protobuf。
Google API客户端的ProtocolBufferModel使用application/x-protobuf。
https://stackoverflow.com/questions/1425912
复制相似问题