EPOLL 服务器

用于高并发的 Linux epoll 接收器。在 sgcWebSockets 服务器上使用有限的线程池,而非 Indy 默认的每个连接一个线程的方式,处理数千个连接。

EPOLL I/O Handler

面向 Linux 上基于 Indy 的服务器的高性能 I/O 模式。通过 IOHandlerOptions 属性在标准服务器上启用 epoll,其扩展能力远超每连接一线程模型。

组件类

TsgcWebSocketServer / TsgcWebSocketHTTPServer — 通过 IOHandlerOptions 启用

机制

Linux epoll 线程池接收器 — 仅限 Linux

平台

Linux

版本

Enterprise

设置 IOHandler 类型,即可运行

在 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 线程池的工作方式以及如何针对您的工作负载进行调优。

线程池 I/O

使用有限的线程池而非每个连接一个线程来处理数千个连接。异步(重叠)请求会分派到整个线程池,而非为每个套接字专用一个线程。

EPOLLThreads

用于 EPOLL 异步请求的线程。默认值 0 表示根据处理器数量计算线程数。在 Delphi 7 和 2007 上默认值为 32,因为不支持 cpucount。需要时可手动调整。

WorkOpThreads

默认情况下,同一连接的每个请求都可能在不同的池线程上运行。设置 WorkOpThreads 可将每个连接固定到同一线程。这会影响性能,因此仅当您需要此特性时才设置大于零的值。

何时使用

当您需要处理数千个连接时推荐使用。如果您的服务器处理的并发连接数最多在 100 左右,可以继续使用默认的 Indy 线程模型。

断开检测

EPOLL 仅在写入时才检测到已失效的套接字。要触发 OnDisconnect,请在 TsgcWebSocketClient 上启用 CleanDisconnect := True,或启用周期性 ping 客户端的服务器端心跳。

Linux 连接上限

提高打开文件描述符上限,以增加可同时打开的连接数。ulimit -n 10000 将打开文件描述符的最大数量设为 10000。

规范与参考

本模式所依赖机制的权威来源。

文档与演示

深度链接到在线帮助,获取可直接运行的演示项目,并阅读完整手册。

在线帮助 — EPOLL 完整的特性参考,含 Delphi、C++ Builder 和 .NET 代码示例。
演示项目 — Demos\Server 可直接运行的示例项目。随 sgcWebSockets 包一同提供 — 请从下方下载试用版。
用户手册(PDF) 涵盖库中每个组件的完整手册。

在 Linux 上扩展到数千个连接

下载免费试用版,将您的 Delphi 服务器切换到 Linux epoll 线程池。