xas*_*ask 2 select epoll nginx kqueue
Nginx使用epoll或其他多路复用技术(select)来处理多个客户端,即不像apache那样为每个请求生成一个新线程.
我尝试使用select在我自己的测试程序中复制相同的内容.我可以通过创建一个非阻塞套接字并使用select来决定服务哪个客户端来接受来自多个客户端的连接.我的程序只是将它们的数据回显给它们.它适用于小数据传输(每个客户端一些字节)
当我需要通过连接发送大文件到客户端时,会出现问题.由于我只有一个线程为所有客户端服务,直到我读完文件并将其写入套接字时,我无法恢复为其他客户端服务.
是否有针对此问题的已知解决方案,或者最好是为每个此类请求创建一个线程?
小智 5
使用select时,不应立即发送整个文件.如果您正在使用sendfile执行此操作,它将阻塞,直到整个文件已发送.而是使用一个小缓冲区,并一次向每个客户端发送一些数据.然后使用select来识别套接字何时再次准备好写入并发送更多信息直到所有数据都已发送.这将允许您并行处理多个客户端.
归档时间: |
|
查看次数: |
7409 次 |
最近记录: |