首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google Protocol Buffers和HTTP

Google Protocol Buffers和HTTP
EN

Stack Overflow用户
提问于 2009-09-15 08:38:02
回答 5查看 65.4K关注 0票数 45

我正在使用gSoap将遗留C++系统重构为面向服务的体系结构。我们有一些性能问题(非常大的XML),所以我的主管让我研究一下协议缓冲区。我做了,它看起来很酷(我们需要C++和Java支持)。但是,protocol buffer只是用于序列化的解决方案,现在我需要将其发送到Java前端。从C++和Java的角度来看,我应该使用什么来通过超文本传输协议(只是内部网络)发送这些序列化的内容?

PS。另一个人试图加速我们的gSoap解决方案,我只对协议缓冲区感兴趣。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-09-15 08:53:24

您甚至可以通过HTTP请求或在HTTP响应中发送二进制有效负载。只需将协议缓冲区的字节直接写入请求/响应,并确保将内容类型设置为"application/octet-stream“。客户端和服务器应该能够很容易地处理剩下的事情。我不认为你需要任何比这更特别的东西。

票数 67
EN

Stack Overflow用户

发布于 2009-09-15 14:37:59

ProtoBuf是一个二进制协议。它和肥皂不能很好地混合。我建议你要么坚持使用gSOAP,要么完全转换为ProtoBuf。

使用protoBuf,您可以使用如下所示的特殊格式定义协议,

代码语言:javascript
复制
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。我们这样定义一个信封,

代码语言:javascript
复制
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了。

票数 25
EN

Stack Overflow用户

发布于 2015-06-05 23:45:12

谷歌前端更喜欢application/protobuf

Google API客户端的ProtocolBufferModel使用application/x-protobuf

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1425912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档