[alibaba/tengine]scgi模块和后端scgi服务是每次请求一个连接,是否可以改成长连接,这样节省文件句柄?

2024-07-10 830 views
6

scgi模块和后端scgi服务是每次请求一个连接,是否可以改成长连接,这样节省文件句柄?

回答

6

https://python.ca/scgi/protocol.txt

  • 协议设计就是短连接, server在一次请求结束就会断连接。
  • 长连接节约文件句柄的说法不准确, 如果是http2的多路复用可以多个并发请求共用一个文件句柄(socket连接),如果是http1,长连接是串行,不会节约文件句柄。
5

这个协议我清楚。我调试发现,每个前端请求一次scgi,tenginx就会向scgi发出一个连接,scgi回复数据后必须主动关闭socket,然后tenginx才会返回结果到前端。假如前端有5000个请求,那么tenginx也会对scgi发起5000个连接对不?都部署在同一系统的情况下,系统整体消耗socket数量就是2倍?我的意思是,如果tenginx和scgi只有一个长连接socket,所有前端发起的请求都通过这个socket传递,这样tenginx和scgi就始终只有一个连接。这样也可以节省系统建立socket的消耗。

9

如果是http1的串行模式,效率将会非常低下, 一个一个请求顺序处理。
如果是http2的多路复用模式,就需要修改协议了。
短连接的打开文件句柄一般都不会成为瓶颈,如果只是优化文件句柄感觉意义不大。

6

谢谢您!谢谢您的解答!非常感谢!祝您生活愉快!