EPOLL 服务器
用于高并发的 Linux epoll 接收器。在 sgcWebSockets 服务器上使用有限的线程池,而非 Indy 默认的每个连接一个线程的方式,处理数千个连接。
用于高并发的 Linux epoll 接收器。在 sgcWebSockets 服务器上使用有限的线程池,而非 Indy 默认的每个连接一个线程的方式,处理数千个连接。
面向 Linux 上基于 Indy 的服务器的高性能 I/O 模式。通过 IOHandlerOptions 属性在标准服务器上启用 epoll,其扩展能力远超每连接一线程模型。
TsgcWebSocketServer / TsgcWebSocketHTTPServer — 通过 IOHandlerOptions 启用
Linux epoll 线程池接收器 — 仅限 Linux
Linux
Enterprise
在 Indy 服务器的 IOHandlerOptions 属性上选择 iohEPOLL,即可从默认线程模型切换到 epoll 线程池。
Server.IOHandlerOptions.IOHandlerType := iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads := 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads := 0;
Server->IOHandlerOptions->IOHandlerType = iohEPOLL;
Server->IOHandlerOptions->EPOLL->EPOLLThreads = 0;
Server->IOHandlerOptions->EPOLL->WorkOpThreads = 0;
Server.IOHandlerOptions.IOHandlerType = iohEPOLL;
Server.IOHandlerOptions.EPOLL.EPOLLThreads = 0;
Server.IOHandlerOptions.EPOLL.WorkOpThreads = 0;
epoll 线程池的工作方式以及如何针对您的工作负载进行调优。
使用有限的线程池而非每个连接一个线程来处理数千个连接。异步(重叠)请求会分派到整个线程池,而非为每个套接字专用一个线程。
用于 EPOLL 异步请求的线程。默认值 0 表示根据处理器数量计算线程数。在 Delphi 7 和 2007 上默认值为 32,因为不支持 cpucount。需要时可手动调整。
默认情况下,同一连接的每个请求都可能在不同的池线程上运行。设置 WorkOpThreads 可将每个连接固定到同一线程。这会影响性能,因此仅当您需要此特性时才设置大于零的值。
当您需要处理数千个连接时推荐使用。如果您的服务器处理的并发连接数最多在 100 左右,可以继续使用默认的 Indy 线程模型。
EPOLL 仅在写入时才检测到已失效的套接字。要触发 OnDisconnect,请在 TsgcWebSocketClient 上启用 CleanDisconnect := True,或启用周期性 ping 客户端的服务器端心跳。
提高打开文件描述符上限,以增加可同时打开的连接数。ulimit -n 10000 将打开文件描述符的最大数量设为 10000。
本模式所依赖机制的权威来源。