浅谈人人网以及淘宝网的IM即时通信以及point-to-point通信

简介:

我想,淘宝网或者是人人网,应该是大家较为熟知的网站了。就算你不是它们的使用者,我想你也应该早有耳闻。人人网和淘宝网的右下角,都提供了"在线"通信功能:


这次,我就和大家来谈谈我认为的这些网站实现这种在线聊天的“通信机制”。

实现Web版的IM(即时消息),是一种很实用的需求。比如:监控系统:后台硬件热插拔、LED、温度、电压发生变化;即时通信系统:其它用户登录、发送信息;即时报价系统:后台数据库内容发生变化;等等。但受限于http协议(基于请求/应答模式)。很难实现“即时”响应功能,来满足这些需求。

通常的解决方案有:基于基本的AJAX技术(不断请求服务端,以交互信息)、Flash Socket(需要有插件)、Java Applet等等。这些方案,可以实现“效果”,但是都有或多或少的缺点。【在之后的资料中,会提供它们分析它们利弊的链接】。

还有一种是基于Server Push技术——Comet。而人人网、淘宝这些大型网站正是采用了这种技术。

首先,登录人人网,然后我们使用Http Watch(用于查看和分析网页请求等信息的工具),可以看到如下的两个连接:


第一个连接的type是“text/html”,当我们在连接的右击,选择打开的时候,看到如下的画面:

这其实是一个初始化ajax“轮询”用的“页面”!

然后截图中的第二个连接,是一个“持续连接”。它保持着打开状态,一直在“侦听”服务端的响应,直到超时:


超时后返回的应该是“超时信息”,原来的“持续”连接有可能被废弃(aborted),然后继续发起“持续”连接。

---------------------------------------------------------------------------淘 宝 Comet 分 析----------------------------------------------------------------------------------------------

同上,我们查看请求:


上图中第一个请求,用于建立连接(bulidconnection)。并携带了两个参数(nkh/t)。截图中第二个也同样是一个Get请求,但是追加携带了两个参数:user/message,同时参数t的值也有所改变。

第三个连接就是用来进行“轮询”的(polling)。见第三个参数:cmd。

这在实现技术上有一些差别,人人网上的“长连接”确实如其名:超时时间设得很“长”。而你会看到淘宝的“长连接”一点也不长,非常短(见下图),取而代之的是采用非常平凡的请求来弥补连接不长的问题。


我想:

人人网采用的是:基于 Iframe 及 htmlfile 的流(streaming)方式

iframe· 是很早就存在的一种 HTML 标记, 通过在 HTML 页面里嵌入一个隐蔵帧,然后将这个隐蔵帧的 SRC 属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。

淘宝网采用的是:基于 AJAX 的长轮询(long-polling)方式

虽然有些许不同,他们几乎都采用了同样的技术:Server Push技术(也就是Comet技术)

资料 :

http://www.fengfly.com/plus/view-171609-1.html

http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

http://www.ibm.com/developerworks/cn/web/wa-cometjava/index.html

http://www.codeproject.com/KB/aspnet/CometAsync.aspx

http://www.codeproject.com/KB/aspnet/AspNetComet.aspx

http://topic.csdn.net/u/20120813/10/5C468BD3-5DB7-4387-A408-CADDF19CD20E.html

http://blog.csdn.net/ibm_hoojo/article/details/7850540

本人之前写过的几篇文章:

http://blog.csdn.net/yanghua_kobe/article/details/6737224

http://blog.csdn.net/yanghua_kobe/article/details/6744518

http://blog.csdn.net/yanghua_kobe/article/details/5451910




原文发布时间为:2011-09-04


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
23天前
|
网络协议 程序员 5G
IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
46 7
IM开发者的零基础通信技术入门(十五):理解定位技术,一篇就够
|
28天前
|
网络协议 算法 程序员
IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
33 5
IM开发者的零基础通信技术入门(十四):高铁上无线上网有多难?一文即懂!
|
2月前
|
网络协议 程序员 5G
IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!
本系列文章尽量使用最浅显易懂的文字、图片来组织内容,力求通信技术零基础的人群也能看懂。但个人建议,至少稍微了解过网络通信方面的知识后再看,会更有收获。如果您大学学习过《计算机网络》这门课,那么一定不要错过本系列文章。
39 0
|
2月前
|
前端开发 网络协议
Netty实战巅峰:从零构建高性能IM即时通讯系统,解锁并发通信新境界
【8月更文挑战第3天】Netty是一款高性能、异步事件驱动的网络框架,适用于开发高并发网络应用,如即时通讯(IM)系统。本文将指导你利用Netty从零构建高性能IM程序,介绍Netty基础及服务器/客户端设计。服务器端使用`ServerBootstrap`启动,客户端通过`Bootstrap`连接服务器。示例展示了简单的服务器启动过程。通过深入学习,可进一步实现用户认证等功能,打造出更完善的IM系统。
77 1
|
4月前
|
边缘计算 JSON 网络协议
移动端IM开发者必读(三):爱奇艺移动端跨国弱网通信的优化实践
本次分享的文章内容,基于爱奇艺面向全球用户推出的国际版,在海外跨国网络环境复杂的前提下,针对性地做了一系列弱网优化实践,取得了不错的效果,在此总结分享我们的一些做法和优化思路,希望对你有所帮助。
54 1
|
5月前
|
移动开发 网络协议 小程序
多端IM通信层框架MobileIMSDK
多端IM通信层框架MobileIMSDK
40 0
|
安全 5G 定位技术
IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!
WiFi对于现在的家庭来说,属于司空见惯的上网方式,但很多情况下,家里房间多、空间大、杂物乱的情况下,WiFi的信号就受影响。为什么WiFi信号会受影响?什么情况下该使用何种方式组网?如何改善WiFi信号差的问题?等等,本文将通俗易懂地为你找到这些问题的答案。
157 0
IM开发者的零基础通信技术入门(十一):为什么WiFi信号差?一文即懂!
|
网络协议 开发工具
IM即时通信系统数据多端同步解决方案
每个客户端定时轮询服务端,请求好友列表。
577 0
|
安全 5G 定位技术
IM开发者的零基础通信技术入门(十二):上网卡顿?网络掉线?一文即懂!
本文将详细介绍生活中遇到的常见网络问题,及可能的解决方法,虽说是一篇技术文章,但内容将一如既往地通俗易懂,简单实用。
112 0
下一篇
无影云桌面