HTML5 WebSockets 基础使用分享

摘要:HTML5之中一个很酷的新特性就是WebSockets,它可以让我们无需AJAX请求即可与服务器端对话。今天彬Go将让大家通过Php环境的服务器端运行WebSocket,创建客户端并通过WebSockets协议发送和接收服务器端信息。

  什么是WebSockets?
  WebSockets是在一个(TCP)接口进行双向通信的技术,PUSH技术类型。同时WebSockets仍将基于W3C标准,目前为止,Chrome和Safari的最新版本浏览器已经支持WebSockets了。

  WebSockets将会替代什么?

  WebSockets可以替代Long Polling(PHP服务端推送技术),这是一个有趣的概念。客户端发送一个请求到服务器,现在,服务器端并不会响应还没准备好的数据,它会保持连接的打开状态直到最新的数据准备就绪发送,之后客户端收到数据,然后发送另一个请求。这有它的好处:减少任一连接的延迟,当一个连接已经打开时就不需要创建另一个新的连接。但是Long-Polling并不是什么花俏技术,他仍有可能发生请求暂停,因此会需要建立新的连接。

  一些AJAX应用使用上述技术-这经常是归因于低资源利用。

  试想一下,如果服务器在早晨会自启动并发送数据到那些希望接收而不用提前建立一些连接端口的客户端,这是一件多棒的事情啊!欢迎来到PUSH技术的世界!

  第一步:搞定WebSocket服务器
  这篇教程会把更多的精力放在客户端的创建而不是服务器端的执行等操作。

  我使用基于windows 7的XAMPP来实现本地运行PHP。phpwebsockets是PHP WebSocket服务器。(以我的经验这个版本存在一些小问题,我已对它做了些修改并上传源文件共享给大家)下面的这些不同版本也可以实现WebSocket,如果某个不能用,你可以试试其它版本或者继续看下面的教程。

启动Apache服务器

第二步:修改URLs和端口

  根据你之前的安装修改服务器,下面是setup.class.php中的例子:

publicfunction _construct($host=‘localhost‘,$port=8000,$max=100)
{
    $this->createSocket($host,$port);
}

浏览文件并在适当情况下进行更改。

第三步:开始创建客户端

  下面来创建基本模板,这是我的client.php文件:

<!DOCTYPE html>
<html>
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <title>WebSockets Client</title>
</head>
<body>
<div id="wrapper">
    <div id="container">
        <h1>WebSockets Client</h1>
        <div id="chatLog"></div>
        <!-- #chatLog -->
        <p id="examples">e.g. try ‘hi‘, ‘name‘, ‘age‘, ‘today‘</p>
        <input id="text" type="text"/>
        <button id="disconnect">Disconnect</button>
    </div>
    <!-- #container -->
</div>
</body>
</html>?

我们已经创建里基本模板:一个chat log容器,一个input输入框和一个断开连接的按钮。

第四步:添加一些CSS

  没什么花俏代码,只是处理一下标签的样式。

body {
    font-family:Arial, Helvetica, sans-serif;
}
#container{
    border:5px solid grey;
    width:800px;
    margin:0 auto;
    padding:10px;
}
#chatLog{
    padding:5px;
    border:1px solid black;
}
#chatLog p {
    margin:0;
}
.event {
    color:#999;
}
.warning{
    font-weight:bold;
    color:#CCC;
}

第五步:WebSocket事件
  首先让我们尝试并理解WebSocket事件的概念:

  WebSocket事件:

  我们将使用三个WebSocket事件:

  • onopen: 当接口打开时
  • onmessage: 当收到信息时
  • onclose: 当接口关闭时

  我们如何来实现呢?

  首先创建WebSocket对象

var socket =new WebSocket("ws://localhost:8000/socket/server/startDaemon.php");

然后向下面这样检测事件

socket.onmessage =function(msg){
   alert(msg); //Awesome!
}

但我们还是尽量避免使用alert,现在我们可以把我们学的东西整合到客户端页面中了。

  

第六步:JavaScript
  首先我们将代码放到jQuery的 document.ready函数中,然后我们还要检查用户的浏览器是否支持WebSocket。如果不支持,我们就添加一个链向Chrome浏览器页面的链接。

$(document).ready(function(){
if(!("WebSocket"in window)){
        $(‘#chatLog, input, button, #examples‘).fadeOut("fast");
        $(‘<p>Oh no, you need a browser that supports WebSockets. How about <a href="http://www.google.com/chrome">Google Chrome</a>?</p>‘).ppendTo(‘#container‘);
    }else{
  //The user has WebSockets
    connect();
function connect(){
  //the connect function code is below
    }
});

如你所见,如果用户浏览器支持WebSocket,我们将执行connect()函数。这里是核心功能,我们将开始创建open、close和receive事件。

  我们将在我们的服务器定义URL。

var socket;
var host ="ws://localhost:8000/socket/server/startDaemon.php";

你可能会发现URL中怎么没有http?恩,是的,这是一个WebSocket URL,使用了不同的协议。下面是URL分解图示:

  下面让我们继续完成connect()函数,我们将代码放入try/catch块,这样如果代码出现问题,我们能让用户知道。我们创建WebSocket,并将信息传递到message()函数,之后会做讲解。我们创建我们的onopen、onmessage和onclose函数.需要注意的是我们为用户提供了端口状态,这并不是必需的,但我们把它放进来主要是为了方便调试。

  • CONNECTING = 0
  • OPEN = 1
  • CLOSED = 2
function connect(){
try{  

var socket;
var host ="ws://localhost:8000/socket/server/startDaemon.php";
var socket =new WebSocket(host);  

        message(‘<p class="event">Socket Status: ‘+socket.readyState);  

        socket.onopen =function(){
             message(‘<p class="event">Socket Status: ‘+socket.readyState+‘ (open)‘);
        }  

        socket.onmessage =function(msg){
             message(‘<p class="message">Received: ‘+msg.data);
        }  

        socket.onclose =function(){
             message(‘<p class="event">Socket Status: ‘+socket.readyState+‘ (Closed)‘);
        }             

    } catch(exception){
         message(‘<p>Error‘+exception);
    }
}

 message()函数很简单,它将我们想展现给用户的文本填入chat log容器内。我们在socket事件函数中为段落(<p>)标签创建适当的class,我们在message函数中只有一个段落结束标签。

function message(msg){
    $(‘#chatLog‘).append(msg+‘</p>‘);
}

目前的成果

  如果你已按上面教程按部就班的做的话,很好,我们已经创建了 HTML/CSS 模板、创建并建立Websocket连接、通过创建连接保持用户的进展更新。

  

第七步:发送数据
  现在我们已经有了提交按钮,但我们还需要监听用户按下键盘的事件,并运行send函数,下面的’13′便是回车键对应的ASCII码。

$(‘#text‘).keypress(function(event) {
if (event.keyCode ==‘13‘) {
        send();
    }
});

 

下面是send()函数:

function send(){  

var text = $(‘#text‘).val();
if(text==""){
        message(‘<p class="warning">Please enter a message‘);
return ;
    }
try{
        socket.send(text);
        message(‘<p class="event">Sent: ‘+text)
    } catch(exception){
    message(‘<p class="warning"> Error:‘+ exception);
    }  

    $(‘#text‘).val("");  

}

  

下面我们需要:

1socket.send();

  那些额外的代码做了以下工作:检测用户是否什么都没输入却仍点击返回、清空input输入框、执行message()函数。

  关闭Socket
  关闭Socket操作相当简单,添加对断开连接按钮的click事件监听就可以。

$(‘#disconnect‘).click(function(){
    socket.close();
});

 

完整JavaScript代码

    $(document).ready(function() {

        if(!("WebSocket"in window)){
            $(‘#chatLog, input, button, #examples‘).fadeOut("fast");
            $(‘<p>Oh no, you need a browser that supports WebSockets. How about <a href="http://www.google.com/chrome">Google Chrome</a>?</p>‘).appendTo(‘#container‘);
        }else{
            //The user has WebSockets
            connect();
            function connect(){
                var socket;
                var host ="ws://localhost:8000/socket/server/startDaemon.php";

                try{
                    var socket =new WebSocket(host);

                    message(‘<p class="event">Socket Status: ‘+socket.readyState);

                    socket.onopen =function(){
                        message(‘<p class="event">Socket Status: ‘+socket.readyState+‘ (open)‘);
                    }

                    socket.onmessage =function(msg){
                        message(‘<p class="message">Received: ‘+msg.data);
                    }

                    socket.onclose =function(){
                        message(‘<p class="event">Socket Status: ‘+socket.readyState+‘ (Closed)‘);
                    }

                } catch(exception){
                    message(‘<p>Error‘+exception);
                }

                function send(){
                    var text = $(‘#text‘).val();

                    if(text==""){
                        message(‘<p class="warning">Please enter a message‘);
                        return ;
                    }
                    try{
                        socket.send(text);
                        message(‘<p class="event">Sent: ‘+text)

                    } catch(exception){
                        message(‘<p class="warning">‘);
                    }
                    $(‘#text‘).val("");
                }

                function message(msg){
                    $(‘#chatLog‘).append(msg+‘</p>‘);
                }

                $(‘#text‘).keypress(function(event) {
                    if (event.keyCode ==‘13‘) {
                        send();
                    }
                });

                $(‘#disconnect‘).click(function(){
                    socket.close();
                });

            }//End connect  

        }//End else  

    });

第九步:运行WebSocket服务器
  我们要输入一些命令行,XAMPP提供了比较方便的shell选项。点击XAMPP控制面板的’shell’按钮并输入:php -q path\to\server.php现在你已经运行了WebSocket服务器!

  大功告成!
  当页面读取后,将尝试创建一个WebSocket连接,然后用户可以输入信息并从服务器接收信息。

  感谢大家耐心阅读本教程,希望你能从中学到有用的知识,HTML5 WebSocket的确令人兴奋不已!大家可以通过The WebSocket API了解HTML5 WebSocket的最新动态。点击这里下载源文件

文章来源:HTML5 WebSockets 基础使用分享

时间: 2024-11-11 10:05:49

HTML5 WebSockets 基础使用分享的相关文章

WebSockets基础

网络套接字是下一代WEB应用程序双向通信技术,它是基于一个独立的socket并且需要客户端浏览器支持HTML5. 一旦你了解了网络套接字与WEB服务器的连接,你将可以从浏览器发送数据到服务器并且可以接收由服务器返回的响应数据. 以下是创建一个新的WebSocket对象的API: var Socket = new WebSocket(url, [protocal] ); 这里第一个参数是指要连接的URL,第二个参数是可选的,如果需要的话,则是指定一个的服务器支持的协议. WEB Socket属性:

html5 Websockets development guidance

1. WebSockets -- full-duplex communication The main HTML5 pillars include Markup, CSS3, and JavaScript APIs For whole set of HTML5, visit html5rocks.com (google product)   The URL The following image shows the WebSocket URL example in tokens: schema

前端基础学习分享

用a标签制作一个按钮为主线,然后围绕这个按钮,做一些效果样式等操作.附件中可以下载CSS参考手册. 一.工具 工欲善其事必先利其器.我们首先需要准备好调试工具,这里我就简单介绍几种,firefox.chrome以及IE. 1.firefox 我们用到的是firebug,非常好用,工具->附加组件.这里有一篇firebug教程. 安装好后按F12就可以直接调试了: 2.chrome chrome的调试工具默认就是自带的,也是按F12就可以出来,但这个调试工具还带了个手机的模拟器,可以用来调试手机页

第一章:HTML5的基础

HTML5基础 1.DoctYpe声明 <!DCTYPE html>必须放在第一行. <title> <title> 百度</title> <meta> <meta charset="UTF-8"/> <h1></h1>------<h6></h6> 提供了六级标签,所有标题字体加粗.<h1>最大<h6>最小 <p></p&g

HTML基础篇分享

今天继续给大家分享一些我整理好的HTML基础部分的笔记. 首先今天第一部分:跑马灯标记 <marquee></marquee> 常见属性: l direction:滚动的方向  取值 left(默认值  从右向左进行滚动).right.up.down l behavior:滚动的方式  取值:scroll(滚动 默认值)  slide(滑动 只滚动一次)  alternate(弹动  打乒乓球一样 ) l width:设置宽度 l height:设置高度 l bgColor:设置背

Html5之基础-3 HTML概述、基础语法、文档结构

一.HTML 概述 超文本 (1) Web 是一个超文本文件的集合 (2) 超文本文件是 Web 的基本组成单元,也称为网页或 HTML 文档.Web页等,通常是以.html或.htm为后缀的文件 (3) Web页上之间通过超文本中的超级链接组织在一起 HTML 概述 (1) HTML(HyperText Markup Language):超文本标记语言,一种纯文本类型的语言 - 使用带有尖括号的"标记"将网页中的内容逐一标识出来 (2) 用来设计网页的标记语言 (3) 用该语言编写的

编程基础知识分享——编程开始之前

对我来说,编程这件事与其说是工作,不如说是兴趣.尽管和自己理想中的编程比,自己的所谓编程只不过是小打小闹,但是现在又有多少所谓的IT从业者是做真正的编程?产业化的今天,其实真的没有必要区分所谓的程序员和码农,每个人的路线和生活都不相同,也不可能相同,有人学编程只是为了一份工作,有人纯粹为了爱好.我的理解,无论出发点如何,只要尊重自己的选择,能够有所收获就够了. 这系列文章,是自己当初学习编程的一些方法和经验,整理了一下,可以分成几块记录.对于专业的程序员,我的经验并不适合,一些计算机专业出身的朋

Ajax基础知识分享

整理的一点有关ajax的知识,给大家分享下! 说到ajax首先我们先要了解一下关于ajax的原理和XmlHttpRequest对象:Ajax的原理简单来说通过XmlHttpRequest对象来向服务器获得数据,然后用javascript来操作DOM而更新页面,这其中最关键的一步就是从服务器获得请求数据.要清楚这个过程和原理. XMLHttpRequest用于后台与服务器交换数据,这意味着可以在不重新加载整个网页的情况下,对网站部分进行更新,当请求被发送到服务器时,每当readyState改变时,

HTML5/CSS3基础

1. HTML 1.1 什么是HTML HTML是用来制作网页的标记语言 HTML是Hypertext Markup Language的英文缩写,即超文本标记语言 HTML语言是一种标记语言,不需要编译,直接由浏览器执行 HTML文件是一个文本文件,包含了一些HTML元素,标签等 HTML文件必须使用.html或.htm为文件名后缀 HTML是大小写不敏感的,HTML与html是一样的 HTML是由W3C的维护的 HTML 是通向 WEB 技术世界的钥匙. 1.2 发展历史 HTML是从2.0版