2019独角兽企业重金招聘Python工程师标准>>>
Nchan作为Nginx web服务器的一个模块,实现了发布/订阅服务器。我这里的调试通过HTTP POST请求发布消息,通过长轮训来订阅消息。(还有其他的发布、订阅的方式,比如websocket。)
1、 下载nginx源码http://nginx.org/并解压;
2、 下载Nchan源码https://nchan.slact.net并解压;
3、 进入nginx源码的根目录,运行./config –add-module=”Nchan源码的根目录”;
4、 运行 make 和 make install;
5、 编译成功的nginx一般在/usr/local/nginx文件夹;
6、 配置nginx和Nchan,编辑/usr/local/nginx/conf/nginx.conf文件:
http {
server {
listen 80;
location = /sub {
nchan_subscriber;
nchan_channel_id foobar;
}
location = /pub {
nchan_publisher;
nchan_channel_id foobar;
}
}
}
- 发布对应的url是/pub,主题是foobar,使用post方法进行发布;
- l使用get方法访问/pub得到目前的主题或通道信息,包括有几个订阅者,共发布了几条消息等;
- 订阅对应的url是/sub,主题是foobar,使用get方法进行订阅。
7、 配置参数化主题
http {
server {
listen 80;
location = /sub {
nchan_subscriber;
nchan_channel_id $arg_id;
}
location = /pub {
nchan_publisher;
nchan_channel_id $arg_id;
}
}
}
订阅和发布的url现在分别为/sub?id=…、/pub?id=… 其中id作为订阅和发布的主题。
8、 长轮训的方式订阅的http get方法需要配置Last-Modified和If-None-Match头来控制接收的消息,如果没有添加这两个头则默认发送主题中的第一条消息,如果想接收最新的消息,则需要配置nchan_subscriber_first_message:
http {
server {
listen 80;
location = /sub {
nchan_subscriber;
nchan_subscriber_first_message newest;
nchan_channel_id $arg_id;
}
location = /pub {
nchan_publisher;
nchan_channel_id $arg_id;
}
}
}