IOCP 服务器
用于高并发的 Windows I/O 完成端口接收器。将 sgcWebSockets 服务器切换到 IOCP IOHandler,以一个小而固定的线程池而非每个连接一个线程的方式服务数千个连接。
用于高并发的 Windows I/O 完成端口接收器。将 sgcWebSockets 服务器切换到 IOCP IOHandler,以一个小而固定的线程池而非每个连接一个线程的方式服务数千个连接。
面向标准 sgcWebSockets 服务器的仅限 Windows 的 I/O 完成端口模式。通过 IOHandlerOptions 启用它,其扩展能力远超默认的 Indy 每连接一线程模型。
TsgcWebSocketServer / TsgcWebSocketHTTPServer — 通过 IOHandlerOptions 启用。
Windows I/O 完成端口(仅限 Windows)。
Windows
Enterprise
进入 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 的工作方式以及如何对其进行调优。
以有限的线程池而非 Indy 默认的每连接一线程方式处理数千个连接。
用于 IOCP 异步(重叠)请求的线程。0 会根据处理器数量自动调整大小。在 Delphi 7 和 2007 上默认值为 32,因为 cpucount 不可用。
需要时可将一个连接固定到同一线程。请求通常会分散到整个线程池,因此同一连接的每个请求可能在不同线程上运行。仅当您需要此特性时才设置大于零的值。这是一种性能权衡。
当您需要处理数千个连接时推荐使用。如果您的服务器并发连接数最多在 100 左右,默认的 Indy 线程模型即可胜任。
IOCP 仅在写入时才检测到已失效的套接字。在 TsgcWebSocketClient 上启用 CleanDisconnect,或启用服务器端心跳,使服务器获知断开并触发 OnDisconnect。
本模式所基于机制的权威来源。