Protobuf 和非阻塞消息发送/接收

Posted

技术标签:

【中文标题】Protobuf 和非阻塞消息发送/接收【英文标题】:Protobuf and Non-blocking message send/recv 【发布时间】:2015-08-15 15:11:38 【问题描述】:

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

【问题讨论】:

【参考方案1】:

不,没有更好的解决方案。事实上,即使在使用阻塞 I/O 时,您也需要编写一个标头来指示大小,因为 Protobuf 不是自定界的(默认情况下,protobuf 解析器将一直读取到 EOF!)。

【讨论】:

好的。我得到了它。谢谢!

以上是关于Protobuf 和非阻塞消息发送/接收的主要内容,如果未能解决你的问题,请参考以下文章

非阻塞socket总结

阻塞非阻塞超时(同步与异步)

同步和异步以及阻塞和非阻塞

同步异步阻塞和非阻塞之间的区别

同步异步阻塞非阻塞的概念理解

同步异步阻塞和非阻塞