2016-07-24 34 views
0

我正在测试服务器的libuv。如何在libuv中等待更多数据?

问题是数据部分到达,我需要等待更多的数据。 (这种情况还没有发生,但我认为这是迫在眉睫,在我的经验)

但这libuv取决于事件的基础上,旁边after_read()函数 不能保证下一个数据包会是剩下的。

我想知道你是如何解决问题的。 谢谢。


加入了解更多信息。 我关心拆分包的情况。

  • 假设客户端A,客户机B,服务器S.

    1. A发送100个字节到服务器。
    2. B向服务器发送100个字节。
    3. S收到A的前50个字节。 (在读取回调中)
    4. S收到B的100个字节。 (在读取回调中)
    5. S收到A的剩余50个字节。 (在读回调)

第3步之后,我预计其余部分的50bytes抵达,但不像我的期望,B的100个字节到达。我的目标是为A的整个数据合并步骤3(50字节)+步骤5(50字节)。

回答

2

在libuv中,您不需要等待数据,就可以通过调用uv_read_start来请求读取数据,然后在有数据要读取时调用读取回调函数。如果您的应用程序需要读取完整的数据包,则通常需要使用状态机来了解您所处的状态,并在数据包完整之前继续缓冲数据。

+0

谢谢你的评论,saghul。我知道uv_read_start和回调函数的基本特征。但我担心分割的数据包。我在帖子中添加了更多解释。我是否需要管理所有的数据包,或者是否有处理数据包顺序和片段的好方法? –

+0

我不认为你可以处理这个没有状态机和一些缓冲。对于每个连接,您缓冲1个数据包,并在完成之前避免处理。如果你使用的是UDP,你需要在源地址和数据包缓冲区之间进行映射,从而使事情变得复杂。 libuv没有内置的工具来帮助你,因为这是非常特定的应用程序。 – saghul

+0

是的。我也认为这是特定应用程序,但我担心我的无知。我正考虑在此刻为每个客户端分配特定大小缓冲区。感谢您的建议。 –