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

当一个初学Web开发的童鞋,产生让服务器“主动”给浏览器客户端发送数据的想法的时候,比他入门稍早的同学会说:

“这是Web!只能由浏览器发起请求,然后得到服务器返回的数据。”

可能接触得更多的童鞋会说:

“除非你用Javascript轮询/心跳,不断请求服务器看有没有新的数据。但是用户多了服务器会受不了。”

都没错。

但主动推送数据非是不可实现的。聪明的先驱们已经找到了更优的解决方案,那就是利用http长连接来实现消息推送系统。

消息推送系统又叫服务器推、Comet技术、Push Server、Server Push等等。它们的含义大同小异,只是从不同场景中得来的不同的称呼而已,具体可以google。我个人比较喜欢Push Server这个名称,很形象——用来向客户端push消息的这么一个server,就叫Push Server。

消息推送系统是一个很有魔力的技术,它实现了攻受的颠倒和权力的反转。服务器不用再傻乎乎地等待着客户端的请求才能发送最新的数据,而是占据了主动,当有新数据的时候,服务器可以立即主动地将数据push给相关的客户端。

想一想,这个时候,你就可以push消息指挥客户端的Javascript做任何事,所有用户的页面都是你的线控木偶了。话说萝莉有三宝,轻音柔体易推倒。Web相比传统软件来说,也算是轻音柔体的萝莉了,而这里的Push Server,也就是推倒萝莉之术了:P 。

推倒萝莉之后,可以做什么呢?当然是很fancy的事情了:

  • 在线好友列表
  • 在线聊天(聊天室、点对点,多人聊天)
  • 即时通知
  • 统计、监控在线用户
  • 实时内容更新

这里要讲的Push Server,是由Javascript + Python(Tornado) + Memcache实现的。但文章中会着重介绍实现原理,而非具体的代码。

Push Server主要包含以下几个方面:

  • http长连接
  • Javascript 的 CORS (The Cross-Origin Resource Sharing)与跨浏览器实现
  • 服务器异步响应
  • 客户端的链接与断开
  • 性能何如

后面的文章会慢慢解来。

原文链接

喜欢这篇文章?

欢迎订阅 PureWeber.com - 纯粹互联网。接收免费的更新提醒,以及订阅读者独家优质内容。

讨论

  1. 刚开始接触,希望能继续写下去

  2. 喜欢这样的文章,

加入讨论

电子邮件地址不会被公开。 必填项已用*标注