zoukankan      html  css  js  c++  java
  • 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协议,无法自动穿越防火墙

  • 相关阅读:
    Lambda表达式、依赖倒置
    ASP.NET vNext 概述
    Uname
    RHEL4 i386下安装rdesktop【原创】
    Taxonomy of class loader problems encountered when using Jakarta Commons Logging(转)
    How to decompile class file in Java and Eclipse
    先有的资源,能看的速度看,不能看的,抽时间看。说不定那天就真的打不开了(转)
    Google App Engine 学习和实践
    【VBA研究】VBA通过HTTP协议实现邮件轨迹跟踪查询
    js正則表達式语法
  • 原文地址:https://www.cnblogs.com/binges/p/5586799.html
Copyright © 2011-2022 走看看