gpt4 book ai didi

select - 使用 select、epoll 或 kqueue 服务大文件

转载 作者:行者123 更新时间:2023-12-04 21:56:32 24 4
gpt4 key购买 nike

Nginx 使用 epoll 或其他多路复用技术(select)来处理多个客户端,即它不像 apache 那样为每个请求生成一个新线程。

我尝试使用 select 在我自己的测试程序中复制相同的内容。我可以通过创建一个非阻塞套接字并使用 select 来决定服务哪个客户端来接受来自多个客户端的连接。我的程序只会将他们的数据回显给他们。它适用于小数据传输(每个客户端一些字节)

当我需要通过连接向客户端发送大文件时出现问题。因为在我完成读取文件并将其写入套接字之前,我只有一个线程来为所有客户端提供服务,所以我无法继续为其他客户端提供服务。

这个问题是否有已知的解决方案,或者最好为每个此类请求创建一个线程?

最佳答案

当使用 select 时,你不应该一次发送整个文件。如果你例如正在使用 sendfile 执行此操作它将阻塞,直到发送了整个文件。而是使用一个小缓冲区,一次向每个客户端发送少量数据。然后使用 select 来确定套接字何时再次准备好写入并发送更多数据直到发送完所有数据。这将允许您并行处理多个客户端。

关于select - 使用 select、epoll 或 kqueue 服务大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2540000/

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