备注:
 
   Nchan 的数据持久化,以及ha 都是通过redis实现的,如果要做到无单点可以使用redis cluster 
   同对于Nchan server 进行多副本
 
1. 安装
  1. 下载nginx or openresty 源码同时下载Nchan 源码进行编译打包即可
 2. 简单sub/pub 配置
  1. location 配置
  2. location = /sub {
  3. nchan_subscriber;
  4. nchan_channel_id $arg_id;
  5. nchan_use_redis on; // 关键
  6. }
  7. location = /pub {
  8. nchan_publisher;
  9. nchan_channel_id $arg_id;
  10. nchan_use_redis on; // 关键
  11. }
  12. redis server 配置
  13. nchan_redis_url "redis://127.0.0.1:6379";
3. ha 配置(伪ha,实际就是nginx 反向代理两台编译了Nchan 的nginx)
  1. lb 配置
  2. server
  3. server {
  4. listen 8089;
  5. location / {
  6. proxy_pass http://ws;
  7. proxy_http_version 1.1;
  8. proxy_set_header Upgrade $http_upgrade;
  9. proxy_set_header Connection "upgrade";
  10. }
  11. }
  12. upstream:
  13. upstream ws {
  14. server xxxxxx:80 weight=2 max_fails=2 fail_timeout=30s;
  15. server xxxxxxxx:8090 weight=1 max_fails=2 fail_timeout=30s;
  16. }
  17. Nchan 配置:
  18. 参考上面的,必须在一台机器
  19. redis cluster 版本的配置
  20. http {
  21. upstream redis_cluster {
  22. nchan_redis_server redis://127.0.0.1:7000;
  23. nchan_redis_server redis://127.0.0.1:7001;
  24. nchan_redis_server redis://127.0.0.1:7002;
  25. # you don't need to specify all the nodes, they will be autodiscovered
  26. # however, it's recommended that you do specify at least a few master nodes.
  27. }
  28. server {
  29. listen 80;
  30. location ~ /sub/(\w+)$ {
  31. nchan_subscriber;
  32. nchan_channel_id $1;
  33. nchan_redis_pass redis_cluster;
  34. }
  35. location ~ /pub/(\w+)$ {
  36. nchan_publisher;
  37. nchan_channel_id $1;
  38. nchan_redis_pass redis_cluster;
  39. }
  40. }
  41. }
4. 测试
  1. // http post data
  2. curl \
  3. -H "Content-type: application/json" \
  4. -d '{"name": "dalong","age":333}' \
  5. 'http://xxxxx:8089/pub?id=demo'
  6. // browser recived data
  7. var ws =new WebScoket("ws://xxxxx:8089/sub?id=demo")
  8. ws.onMessage=funciton(data){
  9. console.log(data)
  10. }
  打开多个浏览器会发现数据是同步的,没有添加redis 的会出现数据无法接受到了
 
5. redis 数据存储查看
  1. 127.0.0.1:6379> KEYS *
  2. 1) "{channel:/demo}"
  3. 2) "{channel:/demo}:msg:1511175437:2"
  4. 3) "{channel:/demo}:msg:1511175436:2"
  5. 4) "{channel:/demo}:msg:1511175435:0"
  6. 5) "{channel:/demo}:msg:1511175437:0"
  7. 6) "{channel:/demo}:messages"
  8. 7) "{channel:/demo}:msg:1511175436:0"
  9. 8) "{channel:/demo}:msg:1511175437:3"
  10. 9) "{channel:/demo}:msg:1511175424:1"
  11. 10) "{channel:/demo}:msg:1511175437:1"
  12. 11) "{channel:/demo}:msg:1511175436:3"
  13. 12) "{channel:/demo}:msg:1511175436:1"
6. 参考文档
  1. https://nchan.io/#channel-multiplexing
  2. 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. svn 教程

    1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    ...

  2. [java]BoneCP 参数详解

    BoneCP 参数详解: ======================================== 一.BoneCP配置文件格式(bonecp-config.xml):  xml versio ...

  3. JQuery数字类型验证正则表达式

    有朋友整了一些关于js与jquery的数字类型验证正则表达式代码,下面我给大家再整理一下. 这里包括了数字验证实现与测试实例了,大家可参考. js验证数字正则表达式 代码如下: //检测是否为数字和小 ...

  4. shiro权限定义的三种方法

    1.在配置文件中定义 <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFa ...

  5. java程序设计基础篇 复习笔记 第五单元

    1. method header: modifier, return value type, method signature(method name, parameter) method body ...

  6. HP数组转JSON函数json_encode和JSON转数组json_decode函数的使用方法

    这两个函数比较简单,我这里直接写例子,但是有一点一定要注意,json数据只支持utf-8格式,GBK格式的数据转换为json会报错! json_encode()用法: <?php$data =a ...

  7. 201621123006 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 多态.重载.继承.覆盖.super.抽象类 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. ...

  8. 解析xml节点属性及子节点内容

    xml样例 <microNearlyThreeYearsOverdueInfo subReportType="13204" subReportTypeCost="9 ...

  9. React 与 可视化

    一般会想到 canvas 和 svg ; svg更适合画图, 但由于cavans在移动端的良好兼容性, 使用的更广; 什么是svg, scalable vector graphics  全称 可缩放矢 ...

  10. jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行?

    jsp页面:js方法里嵌套java代码(是操作数据库的),如果这个js 方法没被调用,当jsp页面被解析的时候,不管这个js方法有没有被调用这段java代码都会被执行? 因为在解析时最新解析的就是JA ...