Protobuf 和非阻塞消息 send/recv

Protobuf and Non-blocking message send/recv

我正在使用 protobuf 和非阻塞 libevent 套接字库开发我的消息传递接口。由于非阻塞属性,libevent 的读取回调可能会在消息未完成的某些点调用(例如,每接收到 4096 字节)。这意味着我必须编写另一个 wrapper/header 指示每条消息的大小,以便我可以将消息正确解析回 protobuf 对象。有更好的解决方案吗?或者 protobuf 是否提供 API 来处理这种情况?

没有,没有更好的解决办法。事实上,即使使用阻塞 I/O,您也需要写一个 header 来指示大小,因为 Protobufs 不是 self-delimiting(默认情况下,protobuf 解析器将始终读取到 EOF!)。