gpt4 book ai didi

C - 套接字 - epoll。慢客户端怎么办?

转载 作者:行者123 更新时间:2023-12-01 23:51:12 25 4
gpt4 key购买 nike

上下文

Debian64 位。

我以为我了解套接字的含义但不是。

担心慢客户端的管理。

阅读并修改该代码 epoll edge triggered

假设有两个客户:A:网络很慢B:非常快的网络。

问题

在边沿触发模式下,如果我们开始从 A 读取,然后当我们处于 A 的读取循环中时 B 也发送一些数据进行读取,会发生什么情况?

B 是否必须等待我们读取来自 A 的所有数据?

或者我们应该创建一个缓冲区(不是在给定的示例中)来存储 A 数据并连接这些数据直到消息完成并立即返回?

或者那个缓冲区已经被 epoll 管理了?

底层的东西我不清楚..

最佳答案

网速慢也没关系,只要读取到目前为止所有到达服务器的数据,读取部分就会停止。

不过其中有一个错误(或至少是一个可移植性问题)。该代码仅在读取数据时检查 EAGAIN。它还应检查 EWOULDBLOCK,因为某些平台在读取所有数据后会返回该错误代码。

编辑:

Ok, so if i want to put the incoming datas into a database, how could i manage it? Will i be able to read the whole datas?

如果您收到一条不完整的消息,您需要将其存储起来,直到收到整条消息。我会为每个带有消息片段的传入连接malloc char*

消息完成后,您可以对其进行处理,将其存储在数据库中或您想要的任何内容。

请注意,下一条消息的开头可能已经可用,因此在收到 EWOULDBLOCKEAGAIN 之前您不能停止阅读。

另一种处理该问题的方法是为每个连接创建一个单独的线程。哪种方法最好?好吧,这取决于应用程序(同时用户的数量等)。

关于C - 套接字 - epoll。慢客户端怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26376777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com