这里我们从系统结构的层面来看消息推送系统(Push Server)的基本原理。

首先需要了解几个基本的概念:

HTTP长连接

翻译自http keep-alive connection和http persistent connection,又叫http connection reuse,网上也有反过来翻译成http long connection。

下面这个图来自wikipedia,讲解了http长连接是在一个TCP连接的基础之上,发送多个HTTP请求以及接收多个HTTP响应,这是为了避免每一次请求都去打开一个新的连接。在HTTP 1.1标准中,所有的请求都认为是长连接。

在这里的消息推送系统中,HTTP长连接的作用就是向服务器发送请求,然后一直等待服务器的返回数据。这就相当于客户端在“监听”服务器了,可以随时接收来自服务器的消息。OK,lolita is ready to be pushed!

同步与异步

同步:IO操作将导致请求进程阻塞,直到IO操作完成。也就是说客户端在发送请求后,必须得在服务端有回应后才发送下一个请求。

异步:IO操作不导致请求进程阻塞。也就是说客户端在发送请求后,不必等待服务端的回应就可以发送下一个请求。

同步与异步说的是客户端与服务器端之间的一种通信方式。

阻塞与非阻塞

阻塞:服务器端的线程或者进程没有处理完数据的时候,不会返回,线程或者进程回被挂起,不再响应其他请求。

非阻塞:服务器端在没有处理完的时候,会立即返回,不会挂起线程或者进程,可以继续响应其他请求。

阻塞与非阻塞说的是服务器端对请求的处理方式。

在消息推送系统中,客户端+服务器端一起,使用的是异步非阻塞。

消息推送系统(Push Server)的结构和原理

好了,接下来是就是消息推送系统(Push Server)的结构和原理了:

1. 客户端发出一个http长连接请求,然后等待服务器的响应。这个请求是异步的,所以客户端可以继续工作,比如发起其他ajax请求等等。这个时候客户端就是一个待推倒的小萝莉了。

2. 服务器接到请求之后,并不立即发送出数据,而是hold住这个connecton。这个处理是非阻塞的,所以服务器可以继续处理其他请求。

3. 在某个时刻,比如服务器有新数据了,服务器再主动把这个消息推送出去,即通过之前建立好的连接将数据推送给客户端。

4. 客户端收到返回。这个时候就可以处理数据,然后再次发起新的长连接。

基本原理就是这么简单。

但是在具体实现的时候,还有很多细节要处理,需要一些其他的技术。

下一篇会讲解客户端Javascript的实现,主要内容是HTTP长连接的建立和CORS在不同浏览器下的实现。

参考资料:

http://en.wikipedia.org/wiki/HTTP_persistent_connection


本文短网址:http://goo.gl/cnJEZ

消息推送系统——(一)概念与原理相关推荐

  1. 消息推送系统——(零)推倒萝莉之术

    当一个初学Web开发的童鞋,产生让服务器"主动"给浏览器客户端发送数据的想法的时候,比他入门稍早的同学会说: "这是Web!只能由浏览器发起请求,然后得到服务器返回的数据 ...

  2. 如何利用springboot快速搭建一个消息推送系统

    最近在完善毕设的路上,由于是设计一个远程控制物联网系统,所以服务端到硬件我选用了MQTT协议.因为MQTT的发布/订阅模式很适合这种场景.接下来就来聊聊遇到的一些问题以及解决思路吧. 毕设技术栈:sp ...

  3. go语言消息推送服务器,Golang 消息推送系统

    ## Golang 消息推送系统 - 使用 websocket 协议,实现全局推送,和分房间推送,实现用户加入房间,退出房间 - gateway 长连接网关服务器,管理全部的链接,以及房间等相关操作 ...

  4. Java版WebSocket消息推送系统搭建

    Java版WebSocket消息推送系统搭建 最近在做消息推送,网上查了一些资料,开始想的是用MQ来做,后面发现用WebSocket来做的话感觉应该要简单点,话不多说,准备撸代码. 后端核心代码 /* ...

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

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

  6. 即时通讯开发如何构建一套移动端消息推送系统

    消息推送作为移动端 APP 运营中的一项关键技术,已经被越来越广泛的运用. 本文追溯了推送技术的发展历史,剖析了其核心原理,并对推送服务的关键技术进行深入剖析,围绕消息推送时产生的服务不稳定性,消息丢 ...

  7. 设计一个百万级的消息推送系统

    2019独角兽企业重金招聘Python工程师标准>>> 前言 首先迟到的祝大家中秋快乐. 最近一周多没有更新了.其实我一直想憋一个大招,分享一些大家感兴趣的干货. 鉴于最近我个人的工 ...

  8. MobPush,免费的APP消息推送系统

    APP消息智能推送是App开发者和运营者日常工作中必备的产品功能,它的主要作用是帮助APP拉新促活,提升用户留存率和活跃度,MobPush是MobTech推出来的一款免费的APP消息推送工具,是目前市 ...

  9. django+python搭建消息推送系统

    django+channels+websocket完成一个实时推送系统 前言 因公司项目需求,需要建立一个展示网站,接入两台摄像机,当摄像机的照片流传过来的时候,实时展示到网页中,所以需要做一个实时推 ...

最新文章

  1. 如何为机器视觉系统选择合适的图像采集卡
  2. windows连linux工具,Windows连接Linux工具
  3. android 程序退出广播,android 利用广播实现程序的强制退出
  4. python中hashmap的方法_如何为Java的HashMap模拟Python的dict的“ items(...
  5. EFCore查缺补漏(二):查询
  6. Linux 命令行通配符及转义符的实现
  7. JPA分页查询与条件分页查询
  8. proxy_pool开源项目攻克学习
  9. SQL语句学习之路7
  10. c语言标准库详解(五):stdio.h之直接IO/文件定位/错误处理
  11. 关于java构造函数 的错误 there is no default constructor available in ...
  12. 【其他】kindle电子书脱壳转换格式
  13. Kali Linux系统正确安装指南教程(一)MAC安装kail+Vmware Fusion详细教程(吐血本人测试10次)
  14. 关于印发《建造师执业资格制度暂行规定》的通知
  15. 应届毕业生不想应聘上班,一心想独自创业,有什么好的项目推荐?
  16. 新人学习EJB!ejb到底是什么?
  17. 刘盈盈计算机科学与技术,关于成立乐清市中小学幼儿园新教师专业发展指导师团队的通知...
  18. Linux宝塔控制面板如何实现多个二级域名301重定向跳转
  19. 我的女儿二三事(十三)
  20. WebGIS开发软件安装问题

热门文章

  1. 卡方检验 (Chi-square test / Chi-square goodness-of-fit test)
  2. 跟我一起写 Makefile(精华帖合辑)之——终结篇
  3. AttributeError:‘AxesSubplot’object has no attribute‘bar_label’
  4. 每一趟安心出行的背后,都有哪些黑科技?
  5. Flink SQL的打印输出的几种方式
  6. 中国IDC行业年度综合实力排名前十
  7. EOS到底适不适合接DeFi仿盘?
  8. 软件程序性能衡量指标
  9. 计算机科学报数学竞赛,报考自招必看!五大学科竞赛利弊详解,到底哪科最适合你?...
  10. 汇总 | 互联网的数据分析网站有哪些,已列举好!