在下面的示例中,客户端指的是浏览器,服务器指的是网站服务器主机。

为了更好的理解这些知识点,你应该简单了解典型的http网站是如何工作的。

普通的http:

  1. 客户端从服务器端请求网页
  2. 服务器作出相应的反应
  3. 服务器返回相应到客户端

AJAX Polling:

  1. 客户端使用普通的http方式向服务器端请求网页
  2. 客户端执行网页中的JavaScript轮询脚本,定期循环的向服务器发送请求(例如每5秒发送一次请求),获取信息
  3. 服务器对每次请求作出响应,并返回相应信息,就像正常的http请求一样

AJAX Long-Polling:

  1. 客户端使用普通的http方式向服务器端请求网页
  2. 客户端执行网页中的JavaScript脚本,向服务器发送数据、请求信息
  3. 服务器并不是立即就对客户端的请求作出响应,而是等待有效的更新
  4. 当信息是有效的更新时,服务器才会把数据推送给客户端
  5. 当客户端接收到服务器的通知时,立即会发送一个新的请求,进入到下一次的轮询

HTML5 Server Sent Events (SSE) / EventSource:

  1. 客户端使用普通的http方式向服务器端请求网页
  2. 客户端执行网页中的JavaScript脚本,与服务器之间建立了一个连接
  3. 当服务器端有有效的更新时,会发送一个事件到客户端
    • 服务器到客户端数据的实时推送,大多数内容是你需要的
    • 你需要一台可以做Event Loop的服务器
    • 不允许跨域的连接
    • 如果你觉得这些还不够,想要了解更多,可以参考下面的文件和手册
      Using server-sent events
      https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
      Server-Sent Events
      http://html5doctor.com/server-sent-events
      Stream Updates with Server-Sent Events
      http://www.html5rocks.com/en/tutorials/eventsource/basics/
      Tutorial: JSF 2 and HTML5 Server Sent Events
      http://jaxenter.com/tutorial-jsf-2-and-html5-server-sent-events-42932.html

HTML5 Websockets:

  1. 客户端使用普通的http方式向服务器端请求网页
  2. 客户端执行网页中的JavaScript脚本,与服务器之间建立了一个连接
  3. 服务器和客户端之间,可以双向的发送有效数据到对方
    • 服务器可以实时的发送数据到客户端,同时客户端也可以实时的发送数据到服务器
    • 你需要一台可以做Event Loop的服务器
    • 使用 WebSockets 允许跨域的建立连接
    • 它同样支持第三方的websocket主机服务器,例如Pusher或者其它。这样你只需要关心客户端的实现 ,降低了开发难度。
    • 如果你觉得这些还不够,想要了解更多,可以参考下面的文件和手册
      An Introduction To WebSockets
      http://www.developerfusion.com/article/143158/an-introduction-to-websockets/
      Writing WebSocket client applications
      https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications
      Start Using HTML5 WebSockets Today
      http://code.tutsplus.com/tutorials/start-using-html5-websockets-today--net-13270

WebRTC:

WebRTC是一种点对点类型的传输方式,它支持多种传输协议,如:UDP、TCP甚至是抽象层的协议。设计它时同时考虑到了允许使用可靠和不可靠的两种方式传输数据。这种技术一般应用在传输数据量较大的内容,比如音、视频等流媒体的传输。

Comet:

Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询iframe流。如果你想了解更多,可以参考维基百科或者IBM

Event Loop
Event Loop是一个程序结构,用于等待和发送消息和事件。
长轮询
长轮询是在打开一条连接以后保持,等待服务器推送来数据再关闭的方式。
iframe流

iframe流方式是在页面中插入一个隐藏的iframe,利用其src属性在服务器和客户端之间创建一条长链接,服务器向iframe传输数据(通常是HTML,内有负责插入信息的javascript),来实时更新页面。

iframe流方式的优点是浏览器兼容好,Google公司在一些产品中使用了iframe流,如Google Talk。

Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别的更多相关文章

  1. Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之间的区别与使用

    1.首先看下最简单的SSE: 只用支持SSE的浏览器(大部分)即可,浏览器内置EventSource对象,该对象默认隔三秒刷新一下response的数据. HTML代码(取自w3cschool): & ...

  2. Ubuntu Server 与 Ubuntu Desktop之间的区别

    服务器版本的内核时钟频率由桌面的100hz转为1khz,这一点是为某些服务器应用提供更好的性能和吞吐量. 除此之外,服务器内核支持SMP"对称多处理"(Symmetrical Mu ...

  3. 使用 SignalR与SSE(Sever sent event)向客户端推送提示信息

    最近有个项目想把c/s的代码转成mvc的,这听起来并不困难. 如果UI和业务逻辑良好分离了的话,不会花太多的功夫,应该多数的内容都能重复利用. 但在实际的操作过程中,发现业务逻辑代码和UI提示全是混在 ...

  4. springmvc 中开发Server Send Event

    springmvc 中开发Server Send Event 学习了:http://blog.csdn.net/leiliz/article/details/55195203 https://www. ...

  5. SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别

    SQL Server 中 EXEC 与 SP_EXECUTESQL 的区别 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是 EXEC 和 SP_EXECUTESQL ,我们先来看一下两种方 ...

  6. SQL Server 表变量和临时表的区别

    SQL Server 表变量和临时表的区别 一.表变量 表变量在SQL Server 2000中首次被引入.表变量的具体定义包括列定义,列名,数据类型和约束.而在表变量中可以使用的约束包括主键约束,唯 ...

  7. Server.UrlEncode、HttpUtility.UrlDecode的区别

    Server.UrlEncode.HttpUtility.UrlDecode的区别 在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗? 测试: string file="文件上(传 ...

  8. 使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务

    使用 Oracle GoldenGate 在 Microsoft SQL Server 和 Oracle Database 之间复制事务 作者:Nikolay Manchev 分步构建一个跨这些平台的 ...

  9. SQL Server 之 在数据库之间进行数据导入导出

    1.同一服务器上数据库之间进行数据导入导出 (1).使用 SELECT INTO 导出数据 在SQL Server中使用最广泛的就是通过SELECT INTO语句导出数据,SELECT INTO语句同 ...

随机推荐

  1. Hdu 3363 Ice-sugar Gourd(对称,圆)

    Ice-sugar Gourd Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  2. NPM使用介绍

    NPM是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署的很多问题,常见的使用场景有以下几种: 允许用户从NPM服务器下载别人编写的第三方包到本地使用 允许用户NPM服务器下载并安装别 ...

  3. .NET架构师

    闲话不多扯,关于.NET架构师的培训  架构师的知识体系总结:7大重点,对7大重点作为细节的阐述将再后面陆续展开!架构师的体系纲领主要来着这7点.(必须严格记下) 1:现代软件开发过程及架构策略 1. ...

  4. js数组、对象、正则

    1.根据给定的条件在原有的数组上,得到所需要的新数组var a = [-1, -1, 1, 2, -2, -2, -3, -3, 3, -3];function f(s, e) {    var re ...

  5. Javaweb 第6天JDBC课程

    JDBC课程 两日大纲 ● JDBC基本操作 ● 预设语句对象 ● 自定义数据库工具类 ● JDBC批处理 ● 事务 ● 连接池 *********************************** ...

  6. 第五十四节,socketserver通讯模块实现并发操作,真多线程并发

    socketserver通讯模块实现并发操作,基于select.epoll.socket.多线程,实现的正真多线程多并发 socketserver通讯模块底层调用的socket模块,只是它作了处理基于 ...

  7. POJ 2234 Matches Game(取火柴博弈1)

    传送门 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  8. C#实现文件的压缩和解压

    这里主要解决文件夹包含文件夹的解压缩问题.1)下载SharpZipLib.dll,在http://www.icsharpcode.net/OpenSource/SharpZipLib/Download ...

  9. 对于Netty的十一个疑问

    [说明]本文原载于码农 IO(manong.io)官方微信 developerWorks,转载.引用请注明出处及作者. 1.Netty 是什么? Netty 是一个基于 JAVA NIO 类库的异步通 ...

  10. createThread和_beginthreadex区别

    摘自:http://blog.csdn.net/morewindows/article/details/7421759 CreateThread()函数是Windows提供的API接口,在C/C++语 ...