最新更新 sitemap 网站制作设计本站搜索
网页设计
国外网站 韩国网站 个人主页 手提袋设计 CSS 网页特效 平面设计 网站设计 Flash CMS技巧 服装网站 php教程 photoshop 画册 服务器选用 数据库 Office
虚拟主机 域名注册 云主机 网页设计 客服QQ:8208442

关于HTML5 WebSockets 基础教程

日期:05-02    来源:中国设计秀    作者:cnwebshow.com

文章简介:HTML5之中一个很酷的新特性就是WebSockets,它可以让我们无需AJAX请求即可与服务器端对话。今天彬Go将让大家通过Php环境的服务器端运行WebSocket,创建客户端并通过WebSockets协议发送和接收服务器端信息。 什么是WebSockets? WebSockets是在一个(TCP)接口进行双向m92中国设计秀

 m92中国设计秀

 m92中国设计秀

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

什么是WebSockets?m92中国设计秀

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

WebSockets将会替代什么?m92中国设计秀

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

一些AJAX应用使用上述技术-这经常是归因于低资源利用。m92中国设计秀

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

第一步:搞定WebSocket服务器m92中国设计秀

这篇教程会把更多的精力放在客户端的创建而不是服务器端的执行等操作。m92中国设计秀

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

jWebSocket (Java)m92中国设计秀

web-socket-ruby (ruby)m92中国设计秀

Socket IO-node (node.js)m92中国设计秀

启动Apache服务器m92中国设计秀

 m92中国设计秀

第二步:修改URLs和端口m92中国设计秀

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

 m92中国设计秀

public function __construct($host='localhost',$port=8000,$max=100)  m92中国设计秀
{  m92中国设计秀
    $this->createSocket($host,$port);  m92中国设计秀
}

 m92中国设计秀

浏览文件并在适当情况下进行更改。m92中国设计秀

第三步:开始创建客户端m92中国设计秀

下面来创建基本模板,这是我的client.php文件:m92中国设计秀

 m92中国设计秀

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

 m92中国设计秀

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

第四步:添加一些cssm92中国设计秀

没什么花俏代码,只是处理一下标签的样式。m92中国设计秀

 m92中国设计秀

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

 m92中国设计秀

第五步:WebSocket事件m92中国设计秀

首先让我们尝试并理解WebSocket事件的概念:m92中国设计秀

 m92中国设计秀

WebSocket事件:m92中国设计秀

我们将使用三个WebSocket事件:m92中国设计秀

onopen: 当接口打开时m92中国设计秀

onmessage: 当收到信息时m92中国设计秀

onclose: 当接口关闭时m92中国设计秀

我们如何来实现呢?m92中国设计秀

首先创建WebSocket对象m92中国设计秀

 m92中国设计秀

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

 m92中国设计秀

然后向下面这样检测事件m92中国设计秀

 m92中国设计秀

socket.onopen = function(){  m92中国设计秀
    alert("Socket has been opened!");  m92中国设计秀
}

 m92中国设计秀

当我们收到信息时这样做:m92中国设计秀

 m92中国设计秀

socket.onmessage = function(msg){  m92中国设计秀
    alert(msg); //Awesome!  m92中国设计秀
}

 m92中国设计秀

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

第六步:JavaScriptm92中国设计秀

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

 m92中国设计秀

$(document).ready(function() {  m92中国设计秀
    if(!("WebSocket" in window)){  m92中国设计秀
        $('#chatLog, input, button, #examples').fadeOut("fast");  m92中国设计秀
        $('<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');  m92中国设计秀
    }else{  m92中国设计秀
  m92中国设计秀
    //The user has WebSockets  m92中国设计秀
  m92中国设计秀
    connect();  m92中国设计秀
  m92中国设计秀
    function connect(){  m92中国设计秀
        //the connect function code is below  m92中国设计秀
  m92中国设计秀
    }  m92中国设计秀
});

 m92中国设计秀

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

我们将在我们的服务器定义URL。m92中国设计秀

 m92中国设计秀

var socket;  m92中国设计秀
var host = "ws://localhost:8000/socket/server/startDaemon.php";

 m92中国设计秀

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

 m92中国设计秀