热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于WEB的实时通信方案

本文所讲述的『实时通信』主要围绕浏览器端和服务器端之间的实时通信。实时通信主要分3大类:1.Pull技术,轮询(Polling)客户端定时轮询请求&#x

本文所讲述的『实时通信』主要围绕浏览器端和服务器端之间的实时通信。实时通信主要分3大类:


1. Pull技术,轮询(Polling)

轮询(Polling)

客户端定时轮询请求,服务器端立刻返回。


  • 优点:短链接,服务器处理方便,支持跨域。
  • 缺点:有一定延迟




2. Push,反向Ajax(Reverse Ajax)或者叫Comet.

实现方式主要有2种,长轮询(Long Polling)和 流推送(Comet Streaming)


2.1 长轮询(Long Polling)

Long Polling

长轮询有2种实现方式:

2.1.1 XHR Long Polling

客户端发起一个XHR ajax request,服务器不马上返回,而是hold住这个connection,直到有数据要push给客户端时(或time out)才发送response;客户端收到response之后马上再发起一个新的request,周而复始。


  • 优点:减少轮询,低延迟, 各大浏览器均支持
  • 缺点:不可跨域,服务器需要hold 住大量connection.

2.1.2 Script Tag Long Polling

原理跟XHR Long Polling类似,只是结合long polling和jsonp,用来支持跨域(cross-domain)请求。


  • 优点:减少轮询,低延迟,支持跨域,各大浏览器均支持
  • 缺点:服务器需要hold 住大量connection.




2.2 流推送(Comet Streaming)

Comet Streaming

Comet Streaming又有2实现方法.

2.2.1 Multi-part XMLHttpRequestg

浏览器必须支持的 multi-part 标志,通过XMLHttpRequest发出request,服务器hold住这个connection,然后可以通过HTTP1.1的chunked encoding机制不断push数据给浏览器直到timeout数据给浏览器直到timeout 或者manual close connection.


  • 优点:客户端一次连接,服务器数据可多次推送。
  • 缺点:并非所有的浏览器都支持 multi-part 标志。

2.2.2 Hidden IFrame(Forever IFrames)

JS生成一个iframe, 发出request,服务器是hold住这个connection,然后可以通过HTTP1.1的chunked encoding机制不断push数据给浏览器直到timeout 或者manual close connection .


  • 优点:客户端一次连接,服务器数据可多次推送。几乎所有支持 iframe 的浏览器上都可用。
  • 缺点:不可跨域,错误处理可控性不强。



3. WebSocket

WebSocket


3.1 WebSocket

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送


  • 优点: 长连接,双向、低延迟和易于处理错误。
  • 缺点:HTML5的新规范,只有部分浏览器支持。服务器端(java)还没有WebSocket 相关规范,服务器厂家各自为政。

3.2 FlashSocket

WebSocket的替代品, 客户端Javascript与Flash交互调用:JS调用Flash Socket接口发送数据,Flash Socket与服务器端Socket服务器通信


  • 优点: 支持所有带flash的浏览器
  • 缺点: 需要安装flash插件,要求打开防火墙的 843 端口,以便 Flash 组件能够执行 HTTP 请求来检索包含域授权的策略文件。



4. 技术选型建议

对于实时性要求高和并发量大的应用,建议方案:


对于实时性要求高和并发量一般的应用,建议方案:


原文地址:http://kenny7.com/2013/05/technical-guide-for-website-realtime-communication.html


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 从零开始构建完整手机站:Vue CLI 3 实战指南(第一部分)
    本系列教程将引导您使用 Vue CLI 3 构建一个功能齐全的移动应用。我们将深入探讨项目中涉及的每一个知识点,并确保这些内容与实际工作中的需求紧密结合。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍如何使用arm-eabi-gdb调试Android平台上的C/C++程序。通过具体步骤和实用技巧,帮助开发者更高效地进行调试工作。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有