IOCP 服务器

用于高并发的 Windows I/O 完成端口接收器。将 sgcWebSockets 服务器切换到 IOCP IOHandler,以一个小而固定的线程池而非每个连接一个线程的方式服务数千个连接。

IOCP IOHandler

面向标准 sgcWebSockets 服务器的仅限 Windows 的 I/O 完成端口模式。通过 IOHandlerOptions 启用它,其扩展能力远超默认的 Indy 每连接一线程模型。

组件类

TsgcWebSocketServer / TsgcWebSocketHTTPServer — 通过 IOHandlerOptions 启用。

机制

Windows I/O 完成端口(仅限 Windows)。

平台

Windows

版本

Enterprise

设置 IOHandler 类型,即可运行

进入 IOHandlerOptions 属性,将 IOHandler Type 选为 iohIOCP。将线程数保持为零,即可根据 CPU 数量自动调整大小。

Server.IOHandlerOptions.IOHandlerType := iohIOCP;
Server.IOHandlerOptions.IOCP.IOCPThreads := 0;
Server.IOHandlerOptions.IOCP.WorkOpThreads := 0;
Server->IOHandlerOptions->IOHandlerType = iohIOCP;
Server->IOHandlerOptions->IOCP->IOCPThreads = 0;
Server->IOHandlerOptions->IOCP->WorkOpThreads = 0;
Server.IOHandlerOptions.IOHandlerType = iohIOCP;
Server.IOHandlerOptions.IOCP.IOCPThreads = 0;
Server.IOHandlerOptions.IOCP.WorkOpThreads = 0;

内部功能

IOCP IOHandler 的工作方式以及如何对其进行调优。

线程池 I/O

以有限的线程池而非 Indy 默认的每连接一线程方式处理数千个连接。

IOCPThreads

用于 IOCP 异步(重叠)请求的线程。0 会根据处理器数量自动调整大小。在 Delphi 7 和 2007 上默认值为 32,因为 cpucount 不可用。

WorkOpThreads

需要时可将一个连接固定到同一线程。请求通常会分散到整个线程池,因此同一连接的每个请求可能在不同线程上运行。仅当您需要此特性时才设置大于零的值。这是一种性能权衡。

何时使用

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

断开检测

IOCP 仅在写入时才检测到已失效的套接字。在 TsgcWebSocketClient 上启用 CleanDisconnect,或启用服务器端心跳,使服务器获知断开并触发 OnDisconnect

规范与参考

本模式所基于机制的权威来源。

文档与演示

深度链接到特性参考,获取可直接运行的演示项目,并下载试用版。

在线帮助 — IOCP 在 sgcWebSockets 服务器上启用 Windows I/O 完成端口的特性参考。
演示项目 — Demos\Server 可直接运行的示例项目。随 sgcWebSockets 包一同提供 — 请从下方下载试用版。
用户手册(PDF) 涵盖库中每个组件的完整手册。

扩展到数千个连接

下载免费试用版,将您的 Delphi 服务器切换到 Windows IOCP IOHandler。