APISIX 是 WebSocket 高并发场景下更稳妥的选择,因其支持路由级超时配置、毫秒级 keepalive 设置、更低内存占用(1.2GB vs 1.8GB)和延迟(P99 35ms vs 52ms),且插件机制更轻量、协议扩展更灵活。

APISIX 是 WebSocket 高并发场景下更稳妥的选择,尤其当连接数超 5000、消息延迟敏感、或需自定义协议扩展时。 Kong 虽然稳定,但在长连接保持、内存压测和热更新响应上存在可感知的瓶颈。
WebSocket 连接保持与超时配置差异
Kong 默认将 proxy_read_timeout 设为 60 分钟,且该值需在 PostgreSQL 中全局修改并重启生效;APISIX 则无硬性限制,可通过路由级配置 upstream.keepalive_timeout 和插件 websocket-proxy 精确控制每个上游的空闲超时,配合 etcd 实时推送,变更秒级生效。
- Kong 修改超时必须重启 worker,高流量下会触发连接重连抖动
- APISIX 的
keepalive_timeout支持毫秒级设置(如3600000表示 1 小时),且不影响已有连接 - 若后端是 Node.js + ws 库,Kong 的固定 timeout 容易误杀心跳间隔不规则的客户端
1 万 WebSocket 连接下的资源与延迟表现
实测数据(4 核 8G,Linux 5.15,OpenResty 1.21.4)显示:APISIX 内存占用约 1.2GB,P99 延迟 35ms;Kong 占用 1.8GB,P99 延迟升至 52ms。差距主要来自两处:
WebSocket 8.18.2 是该协议规范的一个重要迭代版本,主要优化了连接稳定性与数据传输效率。它通过全双工通信机制,允许客户端与服务器在单一长连接上实时交换数据,大幅降低传统 HTTP 轮询的开销。该版本增强了心跳保活、自动重连及二进制帧传输能力,适用于即时通讯、在线游戏及金融行情推送等低延迟场景,为开发者提供更可靠的实时网络交互基础。
- Kong 的插件链每次 WS 帧转发都触发 Lua table 构建/销毁,高频小包下 GC 压力明显
- APISIX 的
websocket-proxy插件绕过部分 HTTP 解析逻辑,直接透传二进制帧,路径更短 - Kong 的 PostgreSQL 轮询同步机制导致配置变更延迟 1–3 秒,APISIX 的 etcd watch 是实时事件驱动
协议扩展与自定义逻辑接入难度
需要在 WS 连接建立阶段校验 JWT、注入用户上下文、或对二进制 payload 做加解密?APISIX 只需一个 access 阶段插件,在 phase = "access" 中调用 core.request.get_headers() 和 core.response.set_header();Kong 则需同时修改 access、header_filter、body_filter 三个生命周期钩子,且无法在连接建立瞬间读取原始 Upgrade 请求头中的自定义字段。
- APISIX 插件只需单个 Lua 文件,
return { _M = { ... } }即可注册 - Kong 插件需声明
schema、init_worker、access、log四个函数,且access中不能访问完整请求体 - Kong 对 WebSocket 的
Upgrade请求仅暴露有限 header,Sec-WebSocket-Protocol等字段默认被过滤
真正难处理的不是“能不能跑 WebSocket”,而是连接数涨到 8000+ 后,Kong 的 PostgreSQL 连接池开始争抢、etcd 的 watch event 积压变慢、以及插件里一句 ngx.sleep(0) 在 APISIX 中是协程让出,在 Kong 中却可能阻塞整个 worker。这些细节不会报错,但会让 P99 延迟从 35ms 悄悄爬到 120ms。

















