做完nn_send后,nn_socket会以Req/Rep的方式禁止立即发送下一条数据

After doing nn_send, the nn_socket will forbid to send the next piece of data immediately in a Req/Rep mode

我正在使用 nanomsg 将我的数据从 Windows 传输到 CentOS。

目前,我正在使用Req/Rep模式。

CentOS 将发送一个 Req 请求,而 "Windows" 将以 Rep 响应它。

看起来不错。

但是我响应的数据是混合了几个结构的。一个数据头跟随几个数据帧。

我要一一发过去

但是根据 nanomsg,Req/Rep 应该只发送一个请求,然后一次接收一个响应。就这些了。

所以如果我发送头部,nn_socket将禁止我发送数据帧。

我能做的就是弄个大buffer,把head和data frame粘在一起,一起发送。

有没有办法一个一个发送而不是一起发送?

谢谢!

类似 Google Protocol Buffers 的东西将成为您的朋友。

nanomsg 发送完整的消息。这只是 "message" 是什么的问题。本质上,它只是它保证传送的一组字节。这些字节实际代表什么取决于您。

这就是 Google Protocol Buffers(或 JSON,或 XML,或 ASN.1 [我个人的最爱],还有许多其他选择)的用武之地. 它允许您定义满足您需要的消息结构,然后生成序列化和反序列化这些消息的代码。您编写代码以序列化/反序列化到缓冲区(字节数组、字符串等),您使用 nanomsg 作为消息传递。

好处是您不必担心字节序、不同编译器中的结构打包等问题,或者另一端使用的是什么编程语言,或者反序列化形式的消息是否是在内存中是连续的。

我提到 GPB 是因为它是免费的,相当简单