Web端即时通讯技术原理分享

web端的IM应用,由于浏览器的兼容性以及其固有的“客户端请求服务器处理并响应”的通信模型,造成了要在浏览器中实现一个兼容性较好的IM应用,其通信过程必然是诸多技术的组合,本文的目的就是要详细探讨这些技术并分析其原理和过程。

 

传统Web的通信原理

浏览器本身作为一个瘦客户端,不具备直接通过系统调用来达到和处于异地的另外一个客户端浏览器通信的功能。这和我们桌面应用的工作方式是不同的,通常桌面应用通过socket可以和远程主机上另外一端的一个进程建立TCP连接,从而达到全双工的即时通信。

浏览器从诞生开始一直走的是客户端请求服务器,服务器返回结果的模式,即使发展至今仍然没有任何改变。所以可以肯定的是,要想实现两个客户端的通信,必然要通过服务器进行信息的转发。例如A要和B通信,则应该是A先把信息发送给IM应用服务器,服务器根据A信息中携带的接收者将它再转发给B,同样B到A也是这种模式。

传统通信方式实现IM应用需要解决的问题

我们认识到基于web实现IM软件依然要走浏览器请求服务器的模式,这这种方式下,针对IM软件的开发需要解决如下三个问题:

    双全工通信:
    即达到浏览器拉取(pull)服务器数据,服务器推送(push)数据到浏览器;
    低延迟:
    即浏览器A发送给B的信息经过服务器要快速转发给B,同理B的信息也要快速交给A,实际上就是要求任何浏览器能够快速请求服务器的数据,服务器能够快速推送数据到浏览器;
    支持跨域:
    通常客户端浏览器和服务器都是处于网络的不同位置,浏览器本身不允许通过脚本直接访问不同域名下的服务器,即使IP地址相同域名不同也不行,域名相同端口不同也不行,这方面主要是为了安全考虑。


即时通讯网注:关于浏览器跨域访问导致的安全问题,有一个被称为CSRF网络攻击方式,请看下面的摘录

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

你这可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全。

CSRF这种攻击方式在2000年已经被国外的安全人员提出,但在国内,直到06年才开始被关注,08年,国内外的多个大型社区和交互网站分别爆出CSRF漏洞,如:NYTimes.com(纽约时报)、Metafilter(一个大型的BLOG网站),YouTube和百度HI......而现在,互联网上的许多站点仍对此毫无防备,以至于安全业界称CSRF为“沉睡的巨人”。

全双工低延迟的解决办法

这是最简单的一种解决方案,其原理是在客户端通过Ajax的方式的方式每隔一小段时间就发送一个请求到服务器,服务器返回最新数据,然后客户端根据获得的数据来更新界面,这样就间接实现了即时通信。优点是简单,缺点是对服务器压力较大,浪费带宽流量(通常情况下数据都是没有发生改变的)。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

 

长轮询(long-polling)

在上面的轮询解决方案中,由于每次都要发送一个请求,服务端不管数据是否发生变化都发送数据,请求完成后连接关闭。这中间经过的很多通信是不必要的,于是又出现了长轮询(long-polling)方式。这种方式是客户端发送一个请求到服务器,服务器查看客户端请求的数据是否发生了变化(是否有最新数据),如果发生变化则立即响应返回,否则保持这个连接并定期检查最新数据,直到发生了数据更新或连接超时。同时客户端连接一旦断开,则再次发出请求,这样在相同时间内大大减少了客户端请求服务器的次数。

基于http-stream通信

上面的long-polling技术为了保持客户端与服务端的长连接采取的是服务端阻塞(保持响应不返回),客户端轮询的方式,在Comet技术中,还存在一种基于http-stream流的通信方式。其原理是让客户端在一次请求中保持和服务端连接不断开,然后服务端源源不断传送数据给客户端,就好比数据流一样,并不是一次性将数据全部发给客户端。它与polling方式的区别在于整个通信过程客户端只发送一次请求,然后服务端保持与客户端的长连接,并利用这个连接在回送数据给客户端。

这种方案有分为几种不同的数据流传输方式。

SSE(服务器推送事件(Server-sent Events)

为了解决浏览器只能够单向传输数据到服务端,HTML5提供了一种新的技术叫做服务器推送事件SSE(关于该技术详细介绍请参见《SSE技术详解:一种全新的HTML5服务器推送事件技术》),它能够实现客户端请求服务端,然后服务端利用与客户端建立的这条通信连接push数据给客户端,客户端接收数据并处理的目的。从独立的角度看,SSE技术提供的是从服务器单向推送数据给浏览器的功能,但是配合浏览器主动请求,实际上就实现了客户端和服务器的双向通信。它的原理是在客户端构造一个eventSource对象,该对象具有readySate属性,分别表示如下:

0:正在连接到服务器;
1:打开了连接;
2:关闭了连接。

同时eventSource对象会保持与服务器的长连接,断开后会自动重连,如果要强制连接可以调用它的close方法。可以它的监听onmessage事件,服务端遵循SSE数据传输的格式给客户端,客户端在onmessage事件触发时就能够接收到数据,从而进行某种处理。

跨域解决办法

关于跨域是什么,限于篇幅所限,这里不做介绍,网上有很多详细的文章,这里只列举解决办法。

基于XHR的COSR(跨域资源共享)

CORS(跨域资源共享)是一种允许浏览器脚本向出于不同域名下服务器发送请求的技术,它是在原生XHR请求的基础上,XHR调用open方法时,地址指向一个跨域的地址,在服务端通过设置'Access-Control-Allow-Origin':'*'响应头部告诉浏览器,发送的数据是一个来自于跨域的并且服务器允许响应的数据,浏览器接收到这个header之后就会绕过平常的跨域限制,从而和平时的XHR通信没有区别。该方法的主要好处是在于客户端代码不用修改,服务端只需要添加'Access-Control-Allow-Origin':'*'头部即可。适用于ff,safari,opera,chrome等非IE浏览器。跨域的XHR相比非跨域的XHR有一些限制,这是为了安全所需要的,主要有以下限制:

    客户端不能使用setRequestHeader设置自定义头部;
    不能发送和接收cookie;
    调用getAllResponseHeaders()方法总会返回空字符串。


以上这些措施都是为了安全考虑,防止常见的跨站点脚本攻击(XSS)和跨站点请求伪造(CSRF)。

基于XDR的CORS

对于IE8-10,它是不支持使用原生的XHR对象请求跨域服务器的,它自己实现了一个XDomainRequest对象,类似于XHR对象,能够发送跨域请求,它主要有以下限制:

    cookie不会随请求发送,也不会随响应返回;
    只能设置请求头部信息中的Content-Type字段;
    不能访问响应头部信息;
    只支持Get和Post请求;
    只支持IE8-IE10。

基于JSONP的跨域

这种方式不需要在服务端添加Access-Control-Allow-Origin头信息,其原理是利用HTML页面上script标签对跨域没有限制的特点,让它的src属性指向服务端请求的地址,其实是通过script标签发送了一个http请求,服务器接收到这个请求之后,返回的数据是自己的数据加上对客户端JS函数的调用,其原理类似于我们上面所说的iframe流的方式,客户端浏览器接收到返回的脚本调用会解析执行,从而达到更新界面的目的。

WebSocket

在上面的这些解决方案中,都是利用浏览器单向请求服务器或者服务器单向推送数据到浏览器这些技术组合在一起而形成的hack技术,在HTML5中,为了加强web的功能,提供了websocket技术,它不仅是一种web通信方式,也是一种应用层协议。它提供了浏览器和服务器之间原生的双全工跨域通信,通过浏览器和服务器之间建立websocket连接(实际上是TCP连接),在同一时刻能够实现客户端到服务器和服务器到客户端的数据发送。关于该技术的原理,在看代码之前,需要先了解websocket整个工作过程。

首先是客户端new 一个websocket对象,该对象会发送一个http请求到服务端,服务端发现这是个webscoket请求,会同意协议转换,发送回客户端一个101状态码的response,以上过程称之为一次握手,经过这次握手之后,客户端就和服务端建立了一条TCP连接,在该连接上,服务端和客户端就可以进行双向通信了。这时的双向通信在应用层走的就是ws或者wss协议了,和http就没有关系了。所谓的ws协议,就是要求客户端和服务端遵循某种格式发送数据报文(帧),然后对方才能够理解。

wecloud1314
关注 关注
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
浅谈前后交互的基本原理
程序员成长指北
06-28 274
大厂技术高级前端Node进阶点击上方程序员成长指北,关注公众号回复1,加入高级Node交流群本文受众人群:前端/后开发工程师;Web应用程序设计师;项目经理;产品经理等。为什么要去了解?了解前后交互的基本原理对于从事与Web开发相关的角色的人群是非常重要的。这包括前端开发工程师、后开发工程师、全栈开发工程师、Web应用程序设计师、项目经理和产品经理等。无论你在开发、设计还是管理层面...
新手入门贴:史上最全Web即时通讯技术原理详解
gyn201204的博客
09-12 644
前言 有关IM(InstantMessaging)聊天应用(如:微信,QQ)、消息推送技术(如:现今移动APP标配的消息推送模块)等即时通讯应用场景下,大多数都是桌面应用程序或者native应用较为流行,而网上关于原生IM(相关文章请参见:《IM架构篇》、《IM综合资料》、《IM/推送的通信格式、协议篇》、《IM心跳保活篇》、《IM安全篇》、《实时音视频开发》)、消息推送应用(参见:《推送
简单的前后通信 H5中前后段通信是什么?
ProgrammingWhite的博客
04-26 830
一:理解前后基本概念 首先,理解一下前段是什么:客户就是前端,即网站前台部分,运行在PC,移动等浏览器上展现给用户浏览的网页。 后是什么:服务就是后,是为客户服务的,服务的内容诸如向客户提供资源,保存客户数据和处理客户数据。 简而言之,如果把网页制作比喻成一家餐厅,那么客户就是餐厅的大厅,装修的非常漂亮,吸引顾客到这里用餐,而服务就像餐厅的后厨,通过精美佳肴留住顾客...
IM即时通讯技术分享
creator平
04-11 2113
IM技术(Instant Messaging Technology)即即时通讯技术,主要是可以让用户或设备间实时交流的技术。它打破了时间和地域的限制让用户能够以文字、语音、视频、文件传输等方式进行通讯。
计算机专业毕设精选-ASP.NET基于TCP协议的简单即时通信软件的设计与实现(源代码+论文).rar
最新发布
03-21
本资源适用于计算机专业的学生、教师和研究人员,以及希望学习和实践网络编程和即时通信技术的开发者。通过本资源,您可以深入了解TCP协议在网络编程中的应用,掌握ASP.NET平台下的网络通信编程技巧,为您的学习和...
PowerTalkBox即时通讯源码和应用
10-03
WebForm下WebPowerTalk/IM/Chat.aspx.cs的string WebServiceAnser = "在线客服", 上面默认是 "在线客服" "在线客服"这两个对应上即可多一个客服 比如,你的数据库里的名是 客服1,客服2,.....等等,利用程序把...
PowerTalkBox即时通讯源码(改进版)下载
04-02
该源码是PowerTalkBox即时通讯源码(改进版)下载,源码powertalkbox免费开源的asp.net,即时通讯控件与大家分享,这是一款免费开源的控件,作者的初衷是为了让来到网站上的人流资源更好的被把握住.传统方式的弊: 靠...
PowerTalkBox即时通讯源码(改进版)
09-24
PowerTalkBox即时通讯源码(改进版) 传统方式的弊: 靠网站联系方式:有时来客会考虑到电话费的问题,如果长途的话,就会更使其考虑是否需要联系了. QQ/MSN等在线客服,如果客户电脑并没有安装QQ或受到病毒干扰,或...
PowerTalkBox即时通讯源码(改进版).rar
07-03
powertalkbox免费开源的asp.net,即时通讯控件与大家分享 这是一款免费开源的控件,作者的初衷是为了让来到网站上的人流资源更好的被把握住. 传统方式的弊: 靠网站联系方式:有时来客会考虑到电话费的问题,如果...
Web即时通讯的几种方式
dreambreeze110的博客
12-17 137
延迟的程度,要看轮询周期,比如轮询周期是3s,某次轮询之后来了一条新消息,那么客户只有在下次轮询请求的时候才能拉到这条消息,延迟时间就约3s。和短轮询不同的是,在长轮询中,服务收到请求后,如果没有新消息/新通知,并不立即返回,而是一直等待,直到达到超时时间。短轮询,客户周期性的向服务发送请求(比如2s,3s,5s......),服务收到请求后,不管是否有新消息/新通知,都立即返回。需要注意的是:sse是单工的,在连接维持期间,只能是服务向客户推送数据,客户不能再向服务发送消息。
Web即时通讯技术(SEE,webSocket)
日常bug
07-28 2600
服务器可以即时地将数据的更新或变化反应到客户,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器服务器再进行响应完成数据的现实更新。实现即时通讯主要有四种方式,它们分别是轮询长轮询(comet)长连接(SSE)WebSocket。它们大体可以分为两类,一种是在HTTP基础上实现的,包括短轮询、comet和SSE;另一种不是在HTTP基础上实现是,即WebSocket。
Web即时通讯技术之SSE
hand2020的博客
06-19 749
即时通讯技术简单的说就是实现这样一种功能:服务器可以即时地将数据的更新或变化反应到客户,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器服务器再进行响应完成数据的现实更新。Web即时通讯技术的四种实现:短轮询,长轮询(comet),长连接(SSE),WebSocket。
Web即时通信技术-WebSocket
crg18438610577的博客
01-18 1513
WebSocket是一种在单个TCP连接上进行全双工通信的协议。
Web实时通讯技术简介
fareise的博客
08-08 7736
一、概述 1.Web即时通讯技术 即时通讯技术简单的说就是实现这样一种功能:服务器可以即时地将数据的更新或变化反应到客户,例如消息即时推送等功能都是通过这种技术实现的。但是在Web中,由于浏览器的限制,实现即时通讯需要借助一些方法。这种限制出现的主要原因是,一般的Web通信都是浏览器先发送请求到服务器服务器再进行响应完成数据的现实更新。 2.实现Web即时通讯的方法 实现即时通讯
前端如何实现即时通讯
zhoukaibai的博客
05-18 692
Websocket是一个全新的、独立的协议,基于TCP协议,与http协议兼容、却不会融入http协议,仅仅作为html5的一部分,其作用就是在服务器和客户之间建立实时的双向通信。● 缺点:基于文本传输效率没有websocket高,不是严格的双向通信,客户向服务发送请求无法复用之前的连接,需要重新发出独立的请求。● 缺点:独立与http的协议,因此需要额外的项目改造,使用复杂度高,必须引入成熟的库,无法兼容低版本浏览器。● 优点:真正意义上的实时双向通信,性能好,低延迟。
android之IM即时通信原理
小钟的专栏
04-16 8500
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。 QQ就
支持百万并发的Web即时通讯方案
蔚可云的博客
08-26 557
Web即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web即时通讯方案大致有4种:传统Ajax短轮询、Comet技术WebSocket技术、SSE(Server-sent Events)。以上4种即时通讯技术各有各的优势和限制,很难决定最佳实践,开发者选型时根据自已的应用场景、开发代价、技术水平等选择适合自已的才是明智选择。Comet技术简介以即时通信为代表的web应用程序对数据的Low Latency要求,传统的基于轮询的方式已经无法满足,而且也会带来不好的用户体验。...
了解JS三种实时通信方式——Eventsource、websocket与socket.io之间的差异和优缺点
weixin_42508580的博客
05-29 9818
它是 WebSockets 的替代方案,因为它比 WebSockets 更简单,更适合处理服务器向客户发送数据的情况。是一种在单个 TCP 连接上提供全双工通信的协议,它使得客户服务器之间进行实时交互变得更加容易。它是一种标准化的通信协议,客户服务器都可以通过它发送消息。和其他实时通信协议,并提供了一组易于使用的 API。它既可以在客户上使用,也可以在服务器上使用,它还提供了许多高级功能,例如自动重连、心跳机制和房间等概念。,只有服务器能够发送消息,所以它更安全。
用verilog编写L298n的工作原理以及阐述其代码
05-31
L298N是一种双全桥直流电机驱动芯片,其工作原理是通过控制四个开关管的开关状态,来控制电机的正反转和速度。其代码可以使用Verilog进行编写。 以下是L298N的Verilog代码示例: ```verilog module L298N ( input clk, input rst, input direction, input [7:0] speed, output [3:0] out ); reg [1:0] state; reg [7:0] count; always @(posedge clk) begin if (rst) begin state <= 2'b00; count <= 8'h00; end else begin case (state) 2'b00: begin out <= 4'b0001; if (count == speed) begin state <= (direction) ? 2'b10 : 2'b01; count <= 8'h00; end else begin count <= count + 1; end end 2'b01: begin out <= 4'b0010; if (count == speed) begin state <= (direction) ? 2'b00 : 2'b11; count <= 8'h00; end else begin count <= count + 1; end end 2'b10: begin out <= 4'b0100; if (count == speed) begin state <= (direction) ? 2'b01 : 2'b00; count <= 8'h00; end else begin count <= count + 1; end end 2'b11: begin out <= 4'b1000; if (count == speed) begin state <= (direction) ? 2'b00 : 2'b01; count <= 8'h00; end else begin count <= count + 1; end end endcase end end endmodule ``` 该代码采用状态机的方式实现L298N的控制,通过控制输出out的值,来控制L298N的开关状态。其中,speed是控制电机速度的参数,direction是控制电机正反转的参数,out是控制L298N开关状态的输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • https和http的区别 24653
  • 防止网站被爬虫抓取的五种有效方法 21166
  • 怎么简单的生成SSL证书 14976
  • SSL安全证书不受信任怎么办 9446
  • SSL安全证书过期的原因及解决方法 9251

最新评论

  • 聊聊即时通讯开发中Android消息推送

    qq_16887631: 前两天才集成了GoEasy提供的Android websocket sdk,简单好用

  • 防止网站被爬虫抓取的五种有效方法

    起嘛名啊: 对于带外公开访问,无需用户登录的网站,345用不了吧

  • 私有化部署对政企单位的意义

    CSDN-Ada助手: 非常感谢您分享这篇关于私有化部署的博客,这对政企单位来说确实具有很大的意义。我们鼓励您继续深入探讨相关技术,为更多人提供好的解决方案。我们建议您写一篇“基于Docker的容器化部署在企业级应用中的实践”,讲解如何在实际应用中使用Docker进行容器化部署,加速项目的交付和迭代。期待您的精彩分享! 2023年博客之星「城市赛道」年中评选已开启(https://activity.csdn.net/creatActivity?id=10470&utm_source=blog_comment_city ), 博主的原力值在所在城市已经名列前茅,持续创作就有机会成为所在城市的 TOP1 博主(https://bbs.csdn.net/forums/blogstar2023?typeId=3152981&utm_source=blog_comment_city),更有丰厚奖品等你来拿~。

  • https证书含有的信息包括哪些

    故渊at: “客户根据http协议书浏览网址时,电脑浏览器和集群服务器是密文传送。”http是明文传输吧?

  • 即时通讯开发之TCP/IP基本概念

    Passerby_Wang: 写得也太详细了吧,学到了好多 也欢迎博主来我这里指点一二呀表情包表情包表情包

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 私有化部署对政企单位的意义
  • 即时通讯软件(企业IM)对企业的作用
  • 私有化部署即时通讯为什么更安全
2023年81篇
2022年330篇
2021年246篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司乌海seo网站优化毕节营销网站多少钱和县营销网站推荐襄樊网站制作设计报价吉林网站改版价格西乡企业网站制作塘坑百度标王报价遵义网站制作价格阿坝百搜标王多少钱吕梁百度seo推荐通辽网站搭建公司飞来峡seo网站优化邢台高端网站设计哪家好通辽关键词排名多少钱玉树外贸网站制作公司深圳企业网站设计哪家好白山网页设计公司庆阳网站建设价格开封网站制作设计推荐鞍山网络广告推广多少钱吉林外贸网站建设多少钱忻州seo排名多少钱保定网站开发报价永新网站推广系统哪家好临猗至尊标王推荐常州优秀网站设计哪家好百色关键词排名包年推广推荐德阳百度标王多少钱普洱模板制作推荐郴州网页设计推荐歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化