如何在 libuv 中等待更多数据?

How to wait for more data in libuv?

我正在为服务器测试 libuv。

问题是部分数据到达,我需要等待更多数据。 (这种情况还没有发生,但根据我的经验,我认为它指日可待)

但是这个libuv是依赖事件库的,下一个after_read()函数 不保证下一个数据包就是剩余的。

我想知道你是如何工作的。 谢谢。


已添加以获取更多信息。 我关心的分包情况

在第 3 步之后,我预计 A 的其余 50 字节会到达,但与我的预期不同,B 的 100 字节会到达。我的目标是合并 A 的整个数据的第 3 步(50 字节)+ 第 5 步(50 字节)。

libuv不等待数据,调用uv_read_start请求读取数据,有数据读取时调用read回调。如果您的应用程序需要读取完整的数据包,您通常希望使用状态机来了解您所处的状态,并保持缓冲数据直到您拥有完整的数据包。

要处理这个问题,只需使用您需要的任何连接特定信息创建您自己的派生 tcp 类型。

typedef struct
{
  uv_tcp_t base;
  int idx;
} my_tcp_t;

然后 malloc 你的结构并转换它

my_tcp_t *client = (my_tcp_t*) malloc(sizeof(my_tcp_t));
client->idx = 2;
uv_tcp_init(loop, (uv_tcp_t*)client);

idx 变量在读取回调中可以通过强制转换 (my_tcp_t*) 获得。