从Http它被连接到WebSocket

1、HTTP协议长期-fi支持和各支持的浏览器

http://blog.csdn.net/fenglibing/article/details/7100222

2、WEBclient与服务端信息交互的几种方式

1)、Flash XMLSocket

入门演示样例:http://en.wikipedia.org/wiki/XMLSocket

不足:

a)、client必须安装 Flash 播放器;

b)、由于 XMLSocket 没有 HTTP 隧道功能,XMLSocket 类不能自己主动穿过防火墙;

c)、由于是使用套接口,须要设置一个通信port,防火墙、代理server也可能对非 HTTP 通道port进行限制;

2)、Java Applet 套接口

不足:

a)、须要安装Java的插件。

b)、有些浏览器执行于如Apple iOS、Android等是不支持Applet的。

c)、软件插件的安装可能会受制于当前用户的系统权限;

d)、受安全限制不可以正常执行;

e)、假设执行的Applet须要安装新的JRE,那么此时用户在看到Applet展示的时候会有等待的过程,这个可能会由于网络或者代理导致失败,使用户不可以正常使用该功能;

f)、Applet标签,必需要是支持跨浏览器的;

详见:http://en.wikipedia.org/wiki/Java_applet#Disadvantages

3)、Comet

a)、基于 AJAX 的长轮询(long-polling)方式

演示样例图:

存在问题就是IE不支持ajax的readystate状态为3的时候读取数据。IE仅仅有在AJAX的readystate请求状态为4的时候才可以读取服务端返回的数据;FF支持;

b)、基于 Iframe 及 htmlfile 的流(streaming)方式

演示样例图:

使用“htmlfile“的 ActiveX 组件,解决IE的载入显示问题;

浏览器兼容性比較好。Google Talk是基于这样的方式实现的;

还是存在从client往服务端发消息时,须要提交新的请求。

4)、HTML5中的WebSocket

1)~3)具体參见:https://www.ibm.com/developerworks/cn/web/wa-lo-comet

3、WebSocket

1)、WebSocket介绍

HTML5 Web Sockets规范定义了Web Sockets API,支持页面使用Web Socket协议与远程主机进行全双工的通信。它引入了WebSocket接口而且定义了一个全双工的通信通道,通过一个单一的套接字在Web上进行操作。

HTML5 Web Sockets以最小的开销高效地提供了Web连接。相较于常常须要使用推送实时数据到client甚至通过维护两个HTTP连接来模拟全双工连接的旧的轮询或长轮询(Comet)来说。这就极大的降低了不必要的网络流量与延迟。

要使用HTML5 Web Sockets从一个Webclient连接到一个远程端点,你要创建一个新的WebSocket实例并为之提供一个URL来表示你想要连接到的远程端点。

该规范定义了ws://以及wss://模式来分别表示WebSocket和安全WebSocket连接。一个WebSocket连接是在client与server之间HTTP协议的初始握手阶段将其升级到Web Socket协议来建立的,其底层仍是TCP/IP连接。

WebSocket Hybi草案12的地址:http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-12,能够以此为入口訪问其他的草案。

2)、长处

a)、server与client之间交换的标头信息非常小,大概仅仅有2字节;

b)、client与server都能够主动传送数据给对方;

c)、不用频率创建TCP请求及销毁请求,降低网络带宽资源的占用。同一时候也节省server资源。

3)、WebSocket数据帧的介绍

a)、草案版本号00到草案版本号05之间。具体能够查看草案文档,解码编码能够看见Netty的WebSocketFrameDecoder和WebSocketFrameEncoder实现;

b)、草案版本号06到如今最新的草案17。介绍參见文章:http://blog.csdn.net/fenglibing/article/details/6852497

4)、WebSocket不同版本号的几种握手方式

a)、无安全key、最老的WebSocket握手协议的实现(Flash)。

b)、带两个安全key请求头的后端握手实现;

c)、带一个安全key请求头的后端握手实现。

參见:http://blog.csdn.net/fenglibing/article/details/7100070

5)、WebSocket能够穿越防火墙吗?

WebSocket使用标准的80及443port,这两个都是防火墙友好协议,Web Sockets使用HTTP Upgrade机制升级到Web Socket协议。HTML5 Web Sockets有着兼容HTTP的握手机制,因此HTTPserver能够与WebSocketserver共享默认的HTTP与HTTPS端(80和443)。

6)、Web Sockets与代理server交互

代理server的问题:

a)、HTTP代理server可能会选择关闭流或闲置的WebSocket连接,由于它们看起好像是尝试连接一个没有回应的HTTPserver;

b)、代理server可能会缓冲未加密的HTTP响应。这将会对HTTP响应流带来不可预计的延迟;

c)、未加密的WebSocket连接(ws://开头的请求)server时。假设中间存在透明代理server,连接可能会失败,或者发送消息会失败。而加密的WebSocket连接在存在透明代理server的情况下成功的机率会比較大。

关于代理具体參见:http://www.infoq.com/cn/articles/Web-Sockets-Proxy-Servers

7)、使用演示样例展示

WebSocket经由浏览器本身实现后,在Web端的实现就很的简单,仅仅须要简单初使化一个WebSocket组件,而且添加onopen、onmessage、onclose等事件的处理就可以,下面是一个用于初使化WebSocket连接(WEB端JS实现)的源代码截图展示:

这一个截图展示的在不支持WebSocket的浏览器,使用Comet针对不同的浏览器进行的组件初使化处理操作:

以下这个图展示的是使用WebSocket与不使用WebSocket发送消息的代码及逻辑差异,当中画红线的部份为使用WebSocket发送消息的实现,仅仅有一行代码。而余下的代码。则是针对不支持WebSocket浏览器发送消息的代码

本文来源于:平立彬的博客

时间: 2024-10-08 21:43:30

从Http它被连接到WebSocket的相关文章

学习WebSocket一(WebSocket初识)

Java EE 7 去年刚刚发布了JSR356规范,使得WebSocket的Java API得到了统一,Tomcat从7.0.47开始支持JSR356,这样一来写WebSocket的时候,所用的代码都是可以一样的.今天终于体验了一把Tomcat发布的WebSocket,用着很爽,下面把这一历程分享给大家. 关键词:WebSocket, Tomcat 前提:使用Tomcat7.0.47,Firefox25.0.0.5046 首先Tomcat7.0.47自带WebSocket的示例程序,有两种版本,

使用WebSocket实现图文直播功能

WebSocket,简单理解就是H5自带的一套Socket API,用它来实现客户端与服务端的长连接. 使用案例: 实现一个活动的实时报道,也就是图文直播功能 首先来看下项目的结构,很简单,就两个类 MyWebSocket.java 这个就是socket的服务端,功能方面只需添加相应的注解即可,注意类名上的注解@ServerEndpoint("/websocket"),这个/websocket就好比是配置在web.xml中的servlet url一样. H5客户端对应这个服务端实现信息

WebSocket简单介绍

Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据:

运维开发:python websocket网页实时显示远程服务器日志信息

功能:用websocket技术,在运维工具的浏览器上实时显示远程服务器上的日志信息 一般我们在运维工具部署环境的时候,需要实时展现部署过程中的信息,或者在浏览器中实时显示程序日志给开发人员看.你还在用ajax每隔段时间去获取服务器日志?out了,试试用websocket方式吧 我用bottle框架,写了个websocket服务端,浏览器连接到websocket server,再用python subprocess获取远程服务器的日志信息,subprocess,就是用Popen调用shell的sh

Java后端WebSocket的Tomcat实现(转)

文章摘要随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据:这种客户端是主动方,服务端是被动方的传统Web模式对于信息变化不频繁的Web

javascript之ProtoBuf在websocket中的使用

因为ProtoBuf的序列化效率和大小都非常好,所以它在网络通信上面应用越来越多:而webosocket也随着web3.0应用越来越广泛,而将这两个结合在一起的也会慢慢形成一种趋势:本人是为了测试自已写的一个C# websocket,所以在web上面结合pb也写了一个js实例: 1.首先下载protobuf.js 2.引入protobuf相关js文件 <script src="/js/protobuf.js"></script> 3.创建proto文件 1 pa

Html Websocket搭建右下角聊天室

最近闲来无事,为我的网站增加了聊天室功能,这里主要用到了websocket技术,这时html5的一种新技术 controller部分 package main.java.web.news; import java.io.IOException; import java.util.concurrent.CopyOnWriteArraySet; import javax.websocket.*; import javax.websocket.server.ServerEndpoint; /** *

Node.js websocket 使用 socket.io库实现实时聊天室

认识websocket WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duple).一开始的握手需要借助HTTP请求完成. 其实websocket 并不是很依赖Http协议,它也拥有自己的一套协议机制,但在这里我们需要利用的socket.io 需要依赖到http . 之前用java jsp写过一个聊天,其实实现逻辑并不难,只是大部分时间都用在UI的设计上,其实现原理就是一个基于websocket的通信,要想做一个好的聊天室,我觉得大部

Java后端WebSocket的Tomcat实现

一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据. 我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据:这种客户端是主动方,服务端是被动方的传统Web模式