我使用gSOAP的重构传统的C ++系统SOA。 我们有一些性能问题(非常大的个XML),所以我的领导让我看看协议缓冲区。 我做到了,它看起来非常酷(我们需要C ++和Java的支持)。 然而协议缓冲区仅供系列化的解决方案,现在我需要把它发送到Java前端。 我应该从C ++和Java透视图用什么来通过HTTP(只是内部网络)发送的序列化的东西?
PS。 另一个人试图来加速我们的解决方案gSOAP的,我感兴趣的只是协议缓冲区。
我使用gSOAP的重构传统的C ++系统SOA。 我们有一些性能问题(非常大的个XML),所以我的领导让我看看协议缓冲区。 我做到了,它看起来非常酷(我们需要C ++和Java的支持)。 然而协议缓冲区仅供系列化的解决方案,现在我需要把它发送到Java前端。 我应该从C ++和Java透视图用什么来通过HTTP(只是内部网络)发送的序列化的东西?
PS。 另一个人试图来加速我们的解决方案gSOAP的,我感兴趣的只是协议缓冲区。
你当然可以用一个HTTP请求发送,甚至一个二进制有效载荷,或在HTTP响应。 只写协议缓冲区的字节直接进入请求/响应,并确保将内容类型设置为“application /八位字节流”。 客户端和服务器,应该可以轻松打理其余部分。 我不认为你需要什么比在两端更加特别。
protobuf的是一个二进制协议。 它不与SOAP拌匀。 我建议你要么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
。
谷歌前端喜欢application/protobuf
。
该ProtocolBufferModel的谷歌API客户端使用application/x-protobuf
。
您可以从字符串序列化/反序列化的protobuf编码数据/。 发送序列化的字符串作为HTTP POST Java和身体去序列化。 这是一种方法。 另一种方法是利用protobuf的服务接口。 protobuf的允许你在一个.proto文件和协议缓冲编译器将产生在你所选的语言服务接口的代码和存根定义服务接口。 你只需要实现的protobuf :: RpcChannel和的protobuf :: RpcController类得到一个完整的RPC框架。 也许你可以写这些类的HTTP包装。 更多信息请参见以下链接:
http://code.google.com/apis/protocolbuffers/docs/proto.html#services http://code.google.com/apis/protocolbuffers/docs/reference/cpp-generated.html#service HTTP:// code.google.com/apis/protocolbuffers/docs/reference/cpp/google.protobuf.service.html
据我所知,协议缓冲区支持是C ++和Java中可用,你应该能够连接两个系统之间交换协议缓冲序列化的数据。
这么说,看来你真正的问题是“我如何发送的东西通过HTTP一个C ++后端和Java客户端之间的”
这听起来像你需要学习如何使用gSOAP的,阅读文档 。
另外,您可以托管在C ++应用程序一个RESTful Web服务器:看看这个: https://stackoverflow.com/questions/298113/how-can-i-implement-a-restful-webservice-using-c++
接下来,您将需要访问托管在您的新的C数据++的RESTful服务器:看看这个: 对Java REST客户端?