web聊天相关知识

http相关知识

http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此用户的身份。客户端若想从web服务器上获取数据,必须主动发起一个请求,然后接收服务器端的返回,服务器端不会主动向客户端推送消息。

基于传统的web服务器只会被动响应客户端请求的这个特性,想实现web实时聊天的需求,有以下几个方式:

 

轮询(polling)

轮询,客户端向服务器发出请求以获取一些数据。为了尽快的获取服务器端事件,轮询的间隔必须尽可能的小。但是这样的缺点:

如果间隔小的话,客户端浏览器就会发出更多的请求,这些请求中的许多都不会返回任何有用的数据,而白白浪费掉带宽和资源。

 

Comet

使用轮询的ajax非常受限:其不具伸缩性,不提供低延迟通信(只要事件一到达服务器端,它们句以尽可能快的速度到达浏览器端)。

Comet是一个web应用模型,在该模型中,请求被发送到服务器端并保持一个很长的存活期,直到超时或是有服务器端事件发生。在该请求完成后,另一个长期存在的ajax请求就被发送到服务器端。

Comet的一个优点是,每个客户端始终都有一个向服务器端打开的通信链路。服务器端可以通过在事件到来时立即提交响应来把事件推给客户端,或者它甚至可以积累再连续发送。因为请求长时间保持打开的状态,故服务器端需要特别的功能来处理所有的这些长生存期请求。

Comet 的实现主要有两种方式:

基于 ajax的长轮询(long-polling)方式

浏览器发出xml HttpRequest请求,服务器端接收到请求后,会阻塞请求直到有数据或着超时才返回,浏览器js在处理请求返回信息(超时或有效数据)后再次发出请求,重新建立连接。在此期间服务器端可能已经有新的数据到达,服务器会选择把数据保存,直到重新建立连接,浏览器会把所有数据一次性取出。

Forever lframe(永存的lframe)

此技术涉及了一个置于页面中隐藏 lframe标签,该标签的src属性指向返回服务器端事件的servlet路径。每次在事件到达时,servlet写入并刷新一个新的script标签,该标签内部带有javascript代码,lframe的内容被附加上这一script标签,标签中的内容就会得到执行。

 

 

WebSocket

在新一代html标准html5中提供了一种浏览器和服务器间进行全双工通讯的网络技术WebSocket。

WebSocket是一个全新的独立的协议,基于TCP协议,与http协议兼容,却不会融入http协议,仅仅作为html5的一部分。于是脚本又被赋予了另一个能力:发起WebSocket请求。

与http协议不同的请求响应模式,WebSocket在建立连接之前有一个Handshake(Openling Handshake)过程,在关闭连接前也有一个Handshake(Closing Handshake)过程,建立连接之后,双方即可双向通信。

(遗憾的是 目前django不支持)

 

以上几种实现方式的优缺点

轮询:

客户端定时向服务器发送ajax请求,服务器接收到请求后马上返回响应信息并关闭连接

优点:后端程序编写比较容易

缺点:请求中有大半无用的,浪费带宽和服务器资源

适用于小型应用

长轮询:

客户端向服务器发送ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应并关闭连接,客户端处理完响应信息后再向服务器发送新的请求

优点:在无消息的情况下不会频繁的请求,耗费资源小

缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护

长连接:

在页面中嵌入一个隐藏iframe,将这个隐藏iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断的向客户端输入数据

优点:消息即时到达,不发无用请求;管理起来也相对方便

缺点:服务器维护一个长连接会增加开销

Flash Socket:

在页面中内嵌入一个使用scoket类的flash程序javascript通过调用此flash程序提供的socket接口与服务器端的socket接口进行通信,javascript在收到服务器端传送的消息后控制页面的显示

优点:实现真正的即时通信,而不是伪即时

缺点:客户端必须安装flash插件,非http协议,无法自动穿越防火墙

时间: 2024-10-13 07:57:38

web聊天相关知识的相关文章

移动WEB viewport 相关知识

了解移动web viewport的知识,主要是为了切图时心中有数.本文主要围绕一个问题:切图时怎样设置<meta name="viewport">相关参数?围绕这个问题对viewport展开讲解. 一.viewport[此处的viewport即layout viewport]概念 移动设备的viewport是指设备屏幕上能够显示网页的一块区域. 这块显示网页的区域可能比浏览器可视区域大,也可能比浏览器可视区域小,切图时也可以设置.默认情况,移动设备的viewport大于移动

Web前端相关知识(一)

1.判断字符串以字母开头,后面可以是数字,下划线,字母,长度为6-30 var reg=/^[a-zA-Z]{1}\w{6,30}$/; 2.请举例使用callee属性实现函数的递归使用 var sum=function(num){ if(num<=1){ return num; } else{ return arguments.callee(num-1)*num; } } console.log("10!=="+sum(10)); 3.Ajax同步和异步的区别,如何解决跨域问题

web.xml相关知识摘录整理

web.xml 中的listener. filter.servlet 加载顺序及其详解 在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter.最终得出的结论是:listener -> filter -> serv

WEB的相关知识总结

JS-->OOP/Module, DOM, JSON, AJAX------------------><script>, script.js的内容 HTML/JS/CSS HTTP Message Business Flow --------------> <script>的内容 顺序,循环,选择 Life Cycle(Files)----->整个环节 Callback:HTML, JS, CSS File--------------><scri

Apache web服务器的相关知识整理及简要说明

本文将梳理Apache    web网站服务器的相关知识,以及在CentOS6.7环境中简单配置Apache web网站的相关用法! 一. Apache web程序安装 利用光盘,制作本地RPM镜像源,利用yum安装httpd程序包. (1)挂载本地光盘 [[email protected] ~]# mount /dev/sr0 /media/cdrom mount: block device /dev/sr0iswrite-protected, mounting read-only [[ema

怎么实现Web聊天

如果你对web聊天这个事情没什么概念,那么最佳做法可能是:openfire+jsjac openfire是java做的开源xmpp服务器,jsjac是javascript做的开源的网页版xmpp客户端. 在openfire的管理界面里面打开http binding和BOSH,并打开"带内账户注册". 把jsjac的simpleclient.html和jsjac.js拷贝到openfire的resources/spank目录 如果你的openfire的http端口是开放在9090端口,则

端口相关知识学习笔记

端口相关知识学习笔记 端口相关知识学习笔记 本周主要精力是放在挂接上,所以知识矩阵的学习回归到根本上,所以这周发的学习笔记是关于计算机端口的相关介绍. 有过一些黑客攻击方面知识的读者都会知道,其实那些所谓的黑客并不是像人们想象那样从天而降,而是实实在在从您的计算机"大门"中自由出入.计算机的" 大门"就是我们平常所说的"端口",它包括计算机的物理端口,如计算机的串口.并口.输入/输出设备以及适配器接口等(这些端口都是可见的),但更多的是不可见的软

ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(一) 之 基层数据搭建,让数据活起来(数据获取)

大家好,本篇是接上一篇 ASP.NET SignalR 与 LayIM2.0 配合轻松实现Web聊天室(零) 前言  ASP.NET SignalR WebIM系列第二篇.本篇会带领大家将 LayIM界面中的数据动态化.当然还不涉及即时消息通讯,如果你已经搞定了数据界面,那么本文您可以简单的看一下,或者略过. 进入正题,layim帮我们定义好了数据规则,我们只要写一个接口实现那个json规范就可以了,剩下的事情就交给layim去做,看一下json格式.(对应文件夹:demo/json/getLi

WEB开发基本知识

参考文献:http://www.cnblogs.com/xdp-gacl/p/3729033.html 一.基本概念 1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访问web页面看到的内容各不相同. 静态web资源开发技术: