备注:
 
   Nchan 的数据持久化,以及ha 都是通过redis实现的,如果要做到无单点可以使用redis cluster 
   同对于Nchan server 进行多副本
 
1. 安装
下载nginx or openresty 源码同时下载Nchan 源码进行编译打包即可
 2. 简单sub/pub 配置
location 配置
location = /sub {
nchan_subscriber;
nchan_channel_id $arg_id;
nchan_use_redis on; // 关键
} location = /pub {
nchan_publisher;
nchan_channel_id $arg_id;
nchan_use_redis on; // 关键
}
redis server 配置
nchan_redis_url "redis://127.0.0.1:6379";
3. ha 配置(伪ha,实际就是nginx 反向代理两台编译了Nchan 的nginx)
lb 配置

  server:
server {
listen 8089;
location / {
proxy_pass http://ws;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
} upstream:
upstream ws {
server xxxxxx:80 weight=2 max_fails=2 fail_timeout=30s;
server xxxxxxxx:8090 weight=1 max_fails=2 fail_timeout=30s;
}
Nchan 配置:
参考上面的,必须在一台机器 redis cluster 版本的配置 http {
upstream redis_cluster {
nchan_redis_server redis://127.0.0.1:7000;
nchan_redis_server redis://127.0.0.1:7001;
nchan_redis_server redis://127.0.0.1:7002;
# you don't need to specify all the nodes, they will be autodiscovered
# however, it's recommended that you do specify at least a few master nodes.
}
server {
listen 80; location ~ /sub/(\w+)$ {
nchan_subscriber;
nchan_channel_id $1;
nchan_redis_pass redis_cluster;
}
location ~ /pub/(\w+)$ {
nchan_publisher;
nchan_channel_id $1;
nchan_redis_pass redis_cluster;
}
}
}
4. 测试
// http post data 

curl \
-H "Content-type: application/json" \
-d '{"name": "dalong","age":333}' \
'http://xxxxx:8089/pub?id=demo' // browser recived data
var ws =new WebScoket("ws://xxxxx:8089/sub?id=demo")
ws.onMessage=funciton(data){
console.log(data) }
  打开多个浏览器会发现数据是同步的,没有添加redis 的会出现数据无法接受到了
 
5. redis 数据存储查看
127.0.0.1:6379> KEYS *
1) "{channel:/demo}"
2) "{channel:/demo}:msg:1511175437:2"
3) "{channel:/demo}:msg:1511175436:2"
4) "{channel:/demo}:msg:1511175435:0"
5) "{channel:/demo}:msg:1511175437:0"
6) "{channel:/demo}:messages"
7) "{channel:/demo}:msg:1511175436:0"
8) "{channel:/demo}:msg:1511175437:3"
9) "{channel:/demo}:msg:1511175424:1"
10) "{channel:/demo}:msg:1511175437:1"
11) "{channel:/demo}:msg:1511175436:3"
12) "{channel:/demo}:msg:1511175436:1"
6. 参考文档
https://nchan.io/#channel-multiplexing
https://nchan.io/documents/nginxconf2016-slides.pdf(很不错的分享)
 
 
 
 

Nchan 实时消息ha 配置的更多相关文章

  1. Nchan 实时消息 安全配置

    备注:     即时消息的安全对于我们来说是比较重要的,作者在设计Nchan 的时候已经考虑了 a. nchan_authorize_request (Hooks and Callbacks)可以集成 ...

  2. Nchan 实时消息内置变量

      以下参考官方文档:   $nchan_channel_idThe channel id extracted from a publisher or subscriber location requ ...

  3. 实时消息平台NSQ的特性

    NSQ是GO语言开发的可用于大规模系统中的实时消息服务,但是和RabbitMQ等相比,它具有什么特色,什么场景下选择NSQ呢? NSQ的自身特色很明显,最主要的优势在如下三个方面: 1,性能.在多个著 ...

  4. NSQ:分布式的实时消息平台

    NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版.NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其 ...

  5. 开源实时消息推送系统 MPush

    系统介绍 mpush,是一款开源的实时消息推送系统,采用java语言开发,服务端采用模块化设计,具有协议简洁,传输安全,接口流畅,实时高效,扩展性强,可配置化,部署方便,监控完善等特点.同时也是少有的 ...

  6. Centrifugo  语言无关的实时消息服务

    Centrifugo 语言无关的实时消息服务,基于golang编写,提供了websocket 以及sockjs 的兼容处理,使用上很简单 同时也支持基于redis的扩展,以下是一个简单的运行测试 环境 ...

  7. CentOS7安装CDH 第七章:CDH集群Hadoop的HA配置

    相关文章链接 CentOS7安装CDH 第一章:CentOS7系统安装 CentOS7安装CDH 第二章:CentOS7各个软件安装和启动 CentOS7安装CDH 第三章:CDH中的问题和解决方法 ...

  8. 未读消息(小红点),前端与 RabbitMQ实时消息推送实践,贼简单~

    前几天粉丝群里有个小伙伴问过:web 页面的未读消息(小红点)怎么实现比较简单,刚好本周手头有类似的开发任务,索性就整理出来供小伙伴们参考,没准哪天就能用得上呢. 之前在 <springboot ...

  9. 我有 7种 实现web实时消息推送的方案,7种!

    技术交流,公众号:程序员小富 大家好,我是小富- 我有一个朋友- 做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能. 不过他还没想好用什么方式做,这里 ...

随机推荐

  1. pahlcon:cookies设置

    非加密方式(简单,但不推荐) 步骤 1 在全局容器中加入Cookie: $di->set('cookies', function () { $cookies = new \Phalcon\Htt ...

  2. centos7 卸载安装失败的mysql7

    1.查询现在的服务器上面的mysql已经安装了什么内容: rpm -qa |grep -i mysql 2.开始卸载执行命令: yum remove mysql-community-common-5. ...

  3. jquery中prop和attr的区别

    jquery中prop和attr的区别 prop: prop(name|properties|key,value|fn) **概述** 获取在匹配的元素集中的第一个元素的属性值. 随着一些内置属性的D ...

  4. 【hdu1005】Number Sequence

    题目描述 一个数列的定义如下: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A和B,你要求出f(n). 输入 输 ...

  5. Mysql 表锁定的问题

    下面的几个语句查询到,但如何定位到对应的进程,还需要学习这些表的结构. select * from information_schema.innodb_trx ## 当前运行的所有事务select * ...

  6. DB2导入导出数据

    1.导出表数据到txt文件: export to /brcb_edp/data_public_edp/file/CCDM/file/FILE_CCDM_DR_CARD_CUST_DET.txt of ...

  7. Linux下的软件的安装

     一.yum相关介绍及命令 [1] 用来管理软件的一个命令.通过该命令完成对软件的下载.卸载等操作. [2] 命令:(必须在yum搭建成功后才能正常运行) yum  clean all      清楚 ...

  8. charles抓包unknow

    如果能抓到包,可是解析不出请求,那一定是证书问题,注意以下几点: 1.设备安装证书,注意要抓包的每一个设备都要安装证书,每一个设备! 2.pc端也要安装证书 如果以上两点都做到一定可以解析https请 ...

  9. python_安装第三方库

    1.有一个专门可下载安装第三方库的网址: http://www.lfd.uci.edu/~gohlke/pythonlibs/   Ctrl+f 搜索要下载的第三方库,并下载 2.库文件都是以 whl ...

  10. Spring核心概念(一)

    1.解决JavaEE的轻量级框架. 2.环境搭建 第一步:导入spring的jar包 第二步:导入配置文件(一般写在resource下面) 第三步:创建一个类(bean) 第四步:在主配置文件中注入这 ...