Pushlets 配置参数详解
基于 Pushlets 的消息推送设计
Pushlets 是通过长连接方式实现“推”消息的。推送模式分为:Poll(轮询)、Pull(拉)。本文围绕 Pull 模式进行设计。
原理
客户端发起请求,服务端接收到请求后根据 Pushlets 协议进行处理。推数据通过 HTTP 响应返回。
客户端在接收到响应后根据 Pushlets 协议进行处理,重新发起请求。Pull 模式时序:

- join:join 请求,服务器端建立 Pushlet 会话
- join-ack:join 应答,返回会话 id
- listen:订阅并监听主题
- listen-ack:监听应答,返回会话 id,订阅 id
- subscribe(可选):订阅主题
- subscribe-ack(可选):订阅主题应答,返回会话 id,订阅
- refresh:长连接请求,实参会话 id
- refresh-ack:长连接响应,包括下一次 refresh 请求间隔
hb:心跳响应
data:推数据 - leave:清空订阅
- leave-ack:清空订阅应答
服务器端
服务器端主要负责维护会话,根据请求处理应答。使用内存队列维护每个会话的主题事件。
事件产生后通过分发器(Dispatcher)将事件发布到指定订阅者的事件队列里。Pull 模式使用阻塞队列,读超时(没有事件)后返回 hb 与 refresh 指令的应答。
事件发布
- 广播:将事件发布给所有订阅者
- 多播:将事件发布给匹配的订阅者
- 单播:将事件发给某个订阅者
关键参数
订阅者的事件队列配置:
- queue.size=24
队列大小为 24。如果队列满了新发布到该队列的事件将被丢弃。 - queue.read.timeout.millis=20000
队列读超时 20 秒。读超时后返回 hb 与 refresh 指令的应答。该项配置即请求线程最长 hold 时间。 - queue.write.timeout.millis=20
队列写超时 20 毫秒。如果队列是满的,等待 20 毫秒后如果还满,则销毁该订阅者。
刷新时长配置:
- pull.refresh.timeout.millis=45000
服务器端刷新超时 45 秒。如果服务器端某订阅者超过 45 秒没有收到客户端的 listen 或 refresh 请求,则销毁该订阅者。该超时判断发生在发布事件时。 - pull.refresh.wait.min.millis=2000
pull.refresh.wait.max.millis=6000
refresh 指令中指定客户端下次请求的等待时间区间,值取该区间内的随机值。
客户端
Pushlets 支持多种客户端,例如浏览器客户端、Java 客户端。浏览器客户端又分为 iframe 和 AJAX 两种。
初始化客户端后,客户端发起监听、订阅请求,并根据服务器返回指令发送 refresh 请求。当有 data 应答时,回调客户端 onData(event) 函数实现消息处理。
技术设计
对 Pushlets 做接口封装以屏蔽其特性细节,也便于以后兼容其他服务器消息推送技术(例如 WebSocket)做好铺垫。
封装的服务器推机制定义为 Channel 服务,提供服务器到浏览器客户端的消息推送。
服务器端
通过 Channel API 在 JS 客户端与服务器端建立长连接,使服务器端可以实时地发送消息给客户端。

JS 客户端
oaweb.Channel() 类:
- init()
初始化服务器调用 URL、客户端状态。 - open()
发送 join 请求,服务端创建会话。 - subscribe(listeners : {topic, onmessage, onerror})
发送 subscribe 请求,服务端创建订阅者,添加订阅主题。 - unsubscribe(topic)
发送 unsubscribe 请求,服务端移除订阅。 - close()
发送 leave 请求,服务端销毁会话。
时序

集群
均衡器通过源地址保持策略保证同一 IP 的请求均会分发到固定服务节点。
当服务节点进行业务逻辑处理后,发送消息到消息服务系统;
服务节点订阅消息主题,当监听到新消息时调用 Channel 服务发布消息到具体的推送实现组件(Pushlets)。

Pushlets 配置参数详解的更多相关文章
- mha配置参数详解
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- reids配置参数详解
转自:http://www.jb51.net/article/60627.htm reids配置参数详解 #daemonize no 默认情况下, redis 不是在后台运行的,如果需要在后台运行, ...
- nginx配置参数详解
配置参数详解 user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍 ...
- Redis配置参数详解
Redis配置参数详解 /********************************* GENERAL *********************************/ // 是否作为守护进 ...
- MHA配置参数详解 【转】
mha配置参数详解: 参数名字 是否必须 参数作用域 默认值 示例 hostname Yes Local Only - hostname=mysql_server1, hostname=192.168 ...
- zookeeper的配置参数详解(zoo.cfg)
配置参数详解(主要是%ZOOKEEPER_HOME%/conf/zoo.cfg文件) 参数名 说明 clientPort 客户端连接server的端口,即对外服务端口,一般设置为2181吧. data ...
- HAproxy 配置参数详解
HAproxy 配置参数详解 /etc/haproxy/haproxy.cfg # 配置文件 ----------------------------------------------------- ...
- samba 配置参数详解
samba 配置参数详解: 一.全局配置参数 workgroup = WORKGROUP说明:设定 Samba Server 所要加入的工作组或者域. server string = Samba S ...
- [转帖]持久化journalctl日志清空命令查看配置参数详解
持久化journalctl日志清空命令查看配置参数详解 最近 linux上面部署服务 习惯使用systemd 进行处理 这样最大的好处能够 使用journalctl 进行查看日志信息. 今天清理了下 ...
随机推荐
- C++ 虚函数的使用
虚函数是C++中用于实现多态(polymorphism)的机制.核心理念就是通过基类访问派生类定义的函数.假设我们有下面的类层次: #include <iostream> using na ...
- HTML5 本地存储实现购物车功能
在家休陪产假,无聊,看自己以前的项目,突然发现之前写的购物车都是用数据库实现的,数据库实现购物车原则上没什么问题,但是需要和数据库交互,这样无意之间降低了程序的效率.今天突发奇想,如果能用HTML5本 ...
- Git管理多个SSH密钥,Git多帐号配置
版权声明:转载须标明本文转自严振杰的博客 https://blog.csdn.net/yanzhenjie1003/article/details/69487932版权声明:转载必须注明本文转自严振杰 ...
- 设计模式 笔记 工厂方法 Factory Methon
//---------------------------15/04/09---------------------------- //factory method 工厂方法-------对象创建型模 ...
- MVC的多页面后台管理系统
MVC的多页面后台管理系统 同样功能的后台管理系统,也是可以使用 ASP.NET MVC .Web API 和JQuery 来制作. 所有的功能都与Angular js的单页面相同.应用层所有的方法都 ...
- nginx 新增域名访问
nginx 新增域名访问 1.申请阿里云域名 2.指向阿里云主机 3.配置nginx文件 server { listen 80; server_name zlx.test.com; set $root ...
- Jupyter Notebook 工作空间 / 默认路径 的设置方式
Jupyter notebook 安装后,启动后,默认的工作空间是当前用户目录.为了方便对文档进行管理,往往需要自行设置工作空间. 下面介绍两种亲试有效的工作空间设置方法. 1.修改快捷方式 对 Ju ...
- Mistakes I Made(as a developer)...大龄程序员的忠告...(部分转...)
在2006年,我开始了编程工作.当意识到来到了十年这个重要的时间关口时,我觉得有必要回顾一下这十年间所犯下的错误,做一做经验总结,并且给正在这个职业上奋斗的人们提出我的一些忠告.开发行业变化得很快,我 ...
- X32位 天堂2 二章/三章 服务端协议号修改方法
[本方法适合于2004-2006年之间天堂2由初章服务端修改至二章.三章端时协议号匹配问题]服务端版本位32位初章服务端 目前大部分SF用的协议号情况: 服务端是419 客户端是 417 419 42 ...
- 安装logstash及logstash的初步使用-处理DNS日志
安装logstash 需要高版本的java 使用1.4版本的java会有报错 # Can't start up: not enough memory 查询java信息 rpm -qa | grep j ...