C ++ protobuf,ZMQ。客户端 - 服务器接口的功能

时间:2016-03-23 14:15:03

标签: c++ sockets client-server protocol-buffers zeromq

当我在C ++上使用ZMQ和来自Google的protobufs进行程序服务器客户端时,触及了与类型差异相关的函数。

问题:函数ParseFromStringSerializeToString使用字符串类型作为参数,但我需要使用zmq::message_t编写程序,例如参数。

Proto file:
package core;
{ message Request
required uint32 id=1;
required uint32 class_id=2;
...}

zmq::message_t msg; // beginning
core::Request reqt;
…
socket.recv(&msg) ;// receiving messgae, socket.recv(reqt) doesn't work
ParseFromString (msg); //serialization to structure doesn’t work

程序是使用套接字执行客户端 - 服务器 需要在彼此之间协调变量字符串类型和消息。 函数ParseFromString()和SerializeToString()。 ВPythonвсепросто:     socket.send(reqt.SerializeToString())и     类标识码= reqt.ParseFromString(socket.recv)

1 个答案:

答案 0 :(得分:0)

您应该使用ParseFromArray()

reqt.ParseFromArray(msg.data(), msg.size());

在序列化方面,使用ByteSize()获取protobuf消息的大小,为其分配空间,然后SerializeToArray()将字节写入空间。

有关这些方法及其他方法的完整文档可在以下网址找到:

https://developers.google.com/protocol-buffers/docs/reference/cpp/google.protobuf.message_lite