当前火起来的HTML5语言里面,很多学者们都还没有完全了解这语言的效果情况,我最喜欢的Web开发技术就是正迅速变得流行的 WebSocket API。WebSocket 提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术。这个新的API提供了一个方法,从客户端使用简单的语法有效地推动消息到服务器。让我们看一看6个HTML5教程介绍里 的 WebSocket API:它可用于客户端、服务器端。而且有一个优秀的第三方API,名为Socket.IO。
一、HTML5 中的 WebSocket API 是个什么东东?
WebSocket API是下一代客户端-服务器的异步通信方法。该通信取代了单个的TCP套接字,使用ws或wss协议,可用于任意的客户端和服务器程序。WebSocket目前由W3C进行标准化。WebSocket已经受到Firefox 4、Chrome 4、Opera 10.70以及Safari 5等浏览器的支持。
WebSocket API最伟大之处在于服务器和客户端可以在给定的时间范围内的任意时刻,相互推送信息。WebSocket并不限于以Ajax(或XHR)方式通信,因为Ajax技术需要客户端发起请求,而WebSocket服务器和客户端可以彼此相互推送信息;XHR受到域的限制,而WebSocket允许跨域通信。
Ajax技术很聪明的一点是没有设计要使用的方式。WebSocket为指定目标创建,用于双向推送消息。
二、HTML5 中的 WebSocket API 的用法
只专注于客户端的API,因为每个服务器端语言有自己的API。下面的代码片段是打开一个连接,为连接创建事件监听器,断开连接,消息时间,发送消息返回到服务器,关闭连接。
04 |
socket.onopen = function (event){
|
06 |
socket.send( 'I am the client and I\\'m listening!' );
|
08 |
socket.onmessage = function (event){
|
09 |
console.log( 'Client received a message' ,event);
|
12 |
socket.onclose = function (event){
|
13 |
console.log( 'Client notified socket has closed' ,event);
|
让我们来看看上面HTML5教程的初始化片段。参数为URL,ws表示WebSocket协议。onopen、onclose和onmessage方法把事件连接到Socket实例上。每个方法都提供了一个事件,以表示Socket的状态。
onmessage事件提供了一个data属性,它可以包含消息的Body部分。消息的Body部分必须是一个字符串,可以进行序列化/反序列化操作,以便传递更多的数据。
WebSocket的语法非常简单,使用WebSockets是难以置信的容易……除非客户端不支持WebSocket。IE浏览器目前不支持WebSocket通信。如果你的客户端不支持WebSocket通信,下面有几个后备方案供你使用:
Flash技术 —— Flash可以提供一个简单的替换。 使用Flash最明显的缺点是并非所有客户端都安装了Flash,而且某些客户端,如iPhone/iPad,不支持Flash。
AJAX Long-Polling技术 —— 用AJAX的long-polling来模拟WebSocket在业界已经有一段时间了。它是一个可行的技术,但它不能优化发送的信息。也就是说,它是一个解决方案,但不是最佳的技术方案。
由于目前的IE等浏览器不支持WebSocket,要提供WebSocket的事件处理、返回传输、在服务器端使用一个统一的API,那么该怎么办呢?幸运的是,Guillermo Rauch创建了一个Socket.IO技术。
三、带Socket.IO的WebSocket
Socket.IO是Guillermo Rauch创建的WebSocket API,Guillermo Rauch是LearnBoost公司的首席技术官以及LearnBoost实验室的首席科学家。Socket.IO使用检测功能来判断是否建立WebSocket连接,或者是AJAX long-polling连接,或Flash等。可快速创建实时的应用程序。Socket.IO还提供了一个NodeJS API,它看起来非常像客户端API。
建立客户端Socket.IO
Socket.IO可以从GitHub下载,可以把socket.io.js文件包含到页面中:
此时,Socket.IO在此页面上是有效的,是时候创建Socket了:
02 |
var socket= new io.Socket( 'localhost' ,{
|
07 |
socket.on( 'connect' , function (){
|
08 |
console.log( 'Client has connected to the server!' );
|
11 |
socket.on( 'message' , function (data){
|
12 |
console.log( 'Received a message from the server!' ,data);
|
15 |
socket.on( 'disconnect' , function (){
|
16 |
console.log( 'The client has disconnected!' );
|
19 |
function sendMessageToServer(message){
|
Socket.IO简化了WebSocket API,统一了返回运输的API。传输包括:
WebSocket
Flash Socket
AJAX long-polling
AJAX multipart streaming
IFrame
JSONP polling
你还可以设置任意的Socket.IO构造器的第二个选项,选项包括:
port - 待连接的端口
transports - 一个数组,包含不同的传输类型
transportOptions - 传输的参数使用的对象,带附加属性
Socket.IO还提供了由本地WebSocket API提供的普通连接、断开连接、消息事件。Socket还提供了封装每个事件类型的方法。
四、NodeJS和Socket.IO联合开发
Socket.IO提供的服务器端解决方案,允许统一的客户端和服务器端的API。使用Node,你可以创建一个典型的HTTP服务器,然后把服务器的实例传递到Socket.IO。从这里,你创建连接、断开连接、建立消息监听器,跟在客户端一样。
一个简单的服务器端脚本看起来如下:HTML5教程的NodeJS和Socket.IO联合开发>>
01 |
// 需要HTTP 模块来启动服务器和Socket.IO |
02 |
var http= require( 'http' ), io= require( 'socket.io' );
|
04 |
var server= http.createServer( function (req, res){
|
05 |
// 发送HTML的headers和message
|
06 |
res.writeHead(200,{ 'Content-Type' : 'text/html' });
|
07 |
res.end( '
Hello Socket Lover!
' );
|
10 |
// 创建一个Socket.IO实例,把它传递给服务器 |
11 |
var socket= io.listen(server);
|
13 |
socket.on( 'connection' , function (client){
|
15 |
client.on( 'message' , function (event){
|
16 |
console.log( 'Received message from client!' ,event);
|
18 |
client.on( 'disconnect' , function (){
|
19 |
clearInterval(interval);
|
20 |
console.log( 'Server has disconnected' );
|
你可以运行服务器部分,假定已安装了NodeJS,从命令行执行:
node socket-server.js
现在客户端和服务器都能来回推送消息了!在NodeJS脚本内,可以使用简单的JavaScript创建一个定期消息发送器:
1 |
// 创建一个定期(每5秒)发送消息到客户端的发送器 |
2 |
var interval= setInterval( function (){
|
3 |
client.send( 'This is a message from the server! ' + new Date().getTime());
|
服务器端将会每5秒推送消息到客户端
五、dojox.Socket和Socket.IO
Persevere的创建者Kris Zyp创建了dojox.Socket。dojox.Socket以Dojo库一致的方式封装了WebSocket API,用于在客户端不支持WebSocket时,使用long-polling替代。
下面是怎样在客户端使用dojox.Socket和在服务器端使用Socket.IO的例子:
01 |
var args, ws= typeof WebSocket!= 'undefined' ;
|
02 |
var socket= dojox.socket(args= {
|
03 |
url: ws? '/socket.io/websocket' : '/socket.io/xhr-polling' ,
|
05 |
'Content-Type' : 'application/x-www-urlencoded'
|
07 |
transport: function (args, message){
|
08 |
args.content = message; // use URL-encoding to send the message instead of a raw body
|
13 |
socket.on( 'message' , function (){
|
16 |
args.url += '/' + sessionId;
|
17 |
} else if (message.substr(0, 3)== '~h~' ){
|
dojox.socket.Reconnect还创建了在套接字失去连接时自动重连。期待包含dojox.Socket的Dojo 1.6版本早日发布。
六、实际应用和WebSocket资源
有很多WebSocke的实际应用。WebSocket对于大多数客户机-服务器的异步通信是理想的,在浏览器内聊天是最突出的应用。WebSocket由于其高效率,被大多数公司所使用。
以上6个html5教程里的介绍内容,大家应该有所认识了吧。
分享到:
相关推荐
资源名称:HTML5 WebSocket权威指南内容简介:《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择...
《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少...
《HTML5 WebSocket权威指南》是HTML5 WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5 WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。书中讨论了基于WebSocket的架构师如何减少...
构建实时Web应用:基于HTML5 WebSocket、PHP和jQuery(对应英文版) Realtime Web Apps: With HTML5 WebSocket, PHP, and jQuery
本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的强大和易用
资源名称:使用 HTML5 WebSocket 构建实时Web应用内容简介: 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的...
《HTML5 WebSocket权威指南》是HTML5WebSocket领域最权威的著作之一,它系统、全面地讲解了HTML5WebSocket的各个方面,是Web开发人员和架构师学习WebSocket的最佳选择。
本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的强大和易用。
HTML5 是下一代互联网的 Web 标准,和以前的版本不同,HTML5 并非仅仅 用来表示 Web 内容,它将使 Web 进入一个成熟的应用平台,在这个平台上,视频、 音频、图像和动画,以及同电脑的交互都被标准化。随着 Adobe ...
[Apress] 实时交互应用开发 —— 使用 HTML5 WebSocket, PHP 和 jQuery [Apress] Realtime Web Apps With HTML5 WebSocket, PHP, and jQuery (E-Book) ☆ 出版信息:☆ [作者信息] Jason Lengstorf, Phil ...
HTML5中新的WEB交互方式WebSocket 最新的基于HTML5的Socket通信,心的JS API Socket接口,方便Web开发
作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地...WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,Web 开发人员可以非常方便地使用 WebSocket 构建实时 web 应用。
基于HTML5技术开发WebSocket的工具书,英文版,内容比较详细
HTML5 标准终定稿 ,作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas、本地存储、多媒体编程接口、WebSocket 等等。这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意。本文为...
代替ocx、ppapi、npapi等通过web页面访问本地资源的插件方式,页面需支持HTML5。使用c#编写websocket服务端,使用vue编写的客户端,在一台电脑上实现vue发起访问指令,通过websocket协议访问本机websocket服务,...
3 lib下的catalina.jar 和 tomcat-coyote.jar取自TOMCAT7.0.32,所以如果部署在TOMCAT7.0.32上就重复了,那么删除WebSocketDemo1/WebRoot/WEB-INF/lib/*.jar 如果部署在其它版本的TOMCAT可以保留(未试过)。
HTML5规范在传统的web交互基础上为我们带来了众多的新特性,随着web技术被广泛用于web APP的开发,这些新特性得以推广和使用,而websocket作为一种新的web通信技术具有巨大意义。 基于浏览器端的web技术,那么它的...