跳转至

nchan: 现代网络的可扩展、灵活的发布/订阅服务器

安装

您可以在任何基于 RHEL 的发行版中安装此模块,包括但不限于:

  • RedHat Enterprise Linux 7、8、9 和 10
  • CentOS 7、8、9
  • AlmaLinux 8、9
  • Rocky Linux 8、9
  • Amazon Linux 2 和 Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-nchan
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-nchan

通过在 /etc/nginx/nginx.conf 的顶部添加以下内容来启用模块:

load_module modules/ngx_nchan_module.so;

本文档描述了 nginx-module-nchan v1.3.8,于 2026 年 2 月 15 日发布。


https://nchan.io

Nchan 是一个可扩展、灵活的发布/订阅服务器,专为现代网络构建,作为 Nginx Web 服务器的模块。它可以配置为独立服务器,或作为您的应用程序与数百、数千或数百万个实时订阅者之间的中介。它可以在内存、磁盘上或通过 Redis 缓冲消息。所有连接都是异步处理的,并在任意数量的工作进程之间分配。它还可以与 Redis 扩展到多个 Nginx 服务器。

消息通过 HTTP POST 请求或 Websocket 发布到频道,并通过 Websocket长轮询EventSource(SSE)、传统的间隔轮询等方式进行订阅。

在 Web 浏览器中,您可以原生使用 Websocket 或 EventSource,或使用 NchanSubscriber.js 包装库。

特性

  • RESTful、HTTP 原生 API
  • 支持 Websocket、EventSource(服务器发送事件)、长轮询和其他基于 HTTP 的订阅者
  • 每个频道可配置的消息缓冲区,提供无重复、无丢失的消息传递保证
  • 通过单个订阅者连接订阅数百个频道
  • HTTP 请求回调和钩子,便于集成
  • 通过频道事件和 URL 进行性能统计监控
  • 频道组使用情况的计量和限制
  • 快速、非阻塞的共享内存本地消息存储,和可选的 Redis 持久存储
  • 使用 Redis 进行水平扩展
  • 通过 Redis 集群实现自动故障转移和高可用性

入门

在您的 nginx 配置中添加两个位置:

http {
  server {
    location = /sub {
      nchan_subscriber;
      nchan_channel_id $arg_id;
    }

    location = /pub {
      nchan_publisher;
      nchan_channel_id $arg_id;
    }
  }
}

您现在可以通过向 /pub?id=channel_id 发送 POST 数据来发布消息,并通过将 Websocket 或 EventSource 指向 sub/?id=channel_id 来订阅。

订阅者端点

Nchan 支持几种订阅者类型:

Websocket

location /sub {
  nchan_subscriber websocket;
  nchan_channel_id foobar;
}

EventSource

location /sub {
  nchan_subscriber eventsource;
  nchan_channel_id foobar;
}

长轮询

location /sub {
  nchan_subscriber longpoll;
  nchan_channel_id foobar;
}

发布者端点

location /pub {
  nchan_publisher;
  nchan_channel_id foobar;
}

发布消息:

curl -X POST -d "hello world" http://localhost/pub

Redis 存储

用于水平扩展和持久存储:

upstream redis_cluster {
  nchan_redis_server redis://127.0.0.1:6379;
}

location /sub {
  nchan_subscriber;
  nchan_channel_id foobar;
  nchan_redis_pass redis_cluster;
}

location /pub {
  nchan_publisher;
  nchan_channel_id foobar;
  nchan_redis_pass redis_cluster;
}

完整文档

有关完整的配置指令和详细文档,请访问 官方 Nchan 文档

完整文档中的关键部分: - 频道复用 - 授权的钩子和回调 - 高可用性的 Redis 集群配置 - 频道事件和自省 - 安全最佳实践

GitHub

您可以在 nginx-module-nchan 的 GitHub 仓库 中找到此模块的其他配置提示和文档。