写实例学习--html5 WebSocket

WebSocket简介

WebSocket是html5的重要特性。它是HTML5一种新的协议,实现了浏览器与服务器全双工通信(full-duplex)。使服务器可以主动传送数据给客户端,对构建实时web应用很有用

WebSocket 原理

webSocket 出现的背景及优点:http://zh.wikipedia.org/wiki/WebSocket

原现实现 :参考 http://www.cnblogs.com/dxy1982/archive/2012/01/19/2325419.html

WebSocket API 及文档

常用方法:

  send(data

事件:

  onopen

  onmessage

  onerror

  onclose 

官方API:http://dev.w3.org/html5/websockets/ 

WebSocket 实例

实例:“看图猜成语”

业务需求:用户在客户端看图,输入成语,服务器端给出是否猜正确的响应。(下面的例子中输出图的方法省略)

实现环境:用nodejs搭建服务器,与 客户端(支持 html5websocket)进行通信。

目的:

1. 了解socket编程的相关知识

2. 了解node 实现socket编程的方法及数据通信

提前准备:

1. 安装nodejs (网上有各自安装教程)

2. 安装nodejs-websocket

npm install nodejs-websocket

代码:

客户端:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>我猜猜</title>
    <link rel="stylesheet" href="http://g.tbcdn.cn/??tb/global/3.2.1/global-min.css,tb/tb-fp/14.7.6/index-e-min.css?t=20141016">
    <script src="http://g.tbcdn.cn/kissy/k/1.4.0/seed-min.js?t=20141016"></script>
    <link rel="stylesheet" href="guess.css"/>
</head>
<body>

<h2 class="header">我猜猜</h2>
<div class="clearfix">
    <section class="mycanvas">
        <h3>画板</h3>
    </section>
</div>

<section class="foot clearfix">
    <div class="btns">
        <!--<label for="">请输入用户名:</label>-->
        <!--<input type="text" id="J_User" value=""/>-->
        <label for="">请输入成语:</label>
        <input type="text" id="J_Word" value=""/>
        <button type="submit" class="next" id="J_Submit">提交</button>
    </div>
    <div class="info" id="J_Message">
        <!--<div class="info-item">msg</div>-->
    </div>

</section>

<script>
    KISSY.use(‘core‘,function(S){
        var $ = S.all;

        var btnSubmit = $(‘#J_Submit‘),
            txtWord = $(‘#J_Word‘),
            divMsg = $(‘#J_Message‘),
            //txtUser = $(‘#J_User‘),
            tpl = ‘<div class="info-item">#msg#</div>‘;
        var ws = createWs();
        var ident = false;

        btnSubmit.on(‘click‘,function(){
            var word = txtWord.val();
            //var user = txtUser.val();
            if(ws){
                if(ident){
                    ws.send(word);
                }

            }
        })

        function createWs(){
            var ws = null;
            if(window.WebSocket){
                ws = new WebSocket(‘ws://127.0.0.1:5000‘);

                ws.onopen = function(e){
                    html = tpl.replace(/#msg#/g, "已连接到服务器");
                    divMsg.append(html);
                    ident = true;
                }
                ws.onclose = function(e){
                    html = tpl.replace(/#msg#/g, "服务器关闭");
                    divMsg.append(html);
                }
                ws.onerror = function(){
                    html = tpl.replace(/#msg#/g, "连接出错");
                    divMsg.append(html);
                }

                ws.onmessage = function(e){
                    console.log(e.data);
                    html = tpl.replace(/#msg#/g, e.data);
                    divMsg.append(html);
                }
            }
            return ws;
        }

    })
</script>

</body>
</html>

服务器端:

var ws = require(‘nodejs-websocket‘);

console.log(‘开始建立连接...‘);

var answer = ‘闻鸡起舞‘;

var server = ws.createServer(function(conn){
    conn.on(‘text‘,function(str){
        console.log(‘收到的信息为:‘+ str);

        var res =‘您输入了‘+ str;
        if(str == answer){
            conn.sendText(res +"。 恭喜你,答对了");
        }else{
            conn.sendText(res +"。 呃,错了");
        }

    })

    conn.on("close", function (code, reason) {
        console.log("关闭连接")
    });
    conn.on("error", function (code, reason) {
        console.log("异常关闭")
    });
}).listen(5000);

启动服务器:

打开客户端:

输入文字:服务器返回信息"您输入了闻鸡起舞。 恭喜你,答对了"

ok,结束。

我也是在学习过程中,如果大家发现文章中有写的不正确的地方,欢迎各位看客指正。

附:nodejs实现websocket

http://blog.fens.me/nodejs-websocket/

http://www.cnblogs.com/fullhouse/archive/2011/07/18/2109953.html

时间: 2025-01-16 04:26:41

写实例学习--html5 WebSocket的相关文章

使用 HTML5 WebSocket 构建实时 Web 应用

作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有"Web 的 TCP "之称的 WebSocket 格外吸引开发人员的注意.WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道.Web 开发人员可以非常方便地使用 WebSocket 构建实时 web 应用,开发人员的手中从此又多了一柄神兵利器.本文首先介绍

基于构建实时WEb应用的HTML5 WebSocket协议&lt;二&gt;

前面说了那么多的理论,我们来看下代码学习. WebSocketAPI简介 首先看一段简单的javascript代码,该代码调用了WebSockets的API. var ws = new WebSocket("ws://echo.websocket.org"); ws.onopen = function(){ws.send("Test!"); }; ws.onmessage = function(evt){console.log(evt.data);ws.close(

对不支持原生html5 websocket的浏览器进行兼容

结果: 转载请注明:TheViper 从github上的 web-socket-js(socket.io好像也是用这个做的他们的flash替代传输方式)改过来的.不过值得注意的是里面的flash websocket代理文件,文件实在是很大,有174k 很好奇,就反编译看下, 是flex做的,这点很不喜欢,因为我没有flex builder也不想因为去改代码重新装一个,然后mx包下面的是flex的组件,com包下是adobe封装的socket和两个加密包 . 最下面那个包才是最主要的,代码不是很复

[转]使用 HTML5 WebSocket 构建实时 Web 应用

HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例来充分展示 WebSocket 的强大和易用. 作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有“Web 的 TCP ”之称的 WebSocket 格外吸引开发人员的注意.WebSocket 的出现使得浏

【HTML5 WebSocket】WebSocket对象特性和方法

<HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接建立后,客户端向服务端发送消息.可分为发送两种消息,一种是普通文本信息,一种是二进制数据.需注意的是,send方法必须在连接建立以后才能使用,也就是在onopen里使用才不会出错. 发送普通消息 这个比较简单,在上一篇学习WebSocket事件时就用到了,只需要send(message)即可. 发送二进制数据

浅谈HTML5 WebSocket的机制

回顾上一章 在上一章<为什么我们需要HTML5 WebSocket>中,我简单的介绍了下WebSocket的前世今生.相信大家已对WebSocket有了初步的了解.那么今天我们继续深入学习WebSocket的机制. WebSocket机制 我们知道WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(不知道的可以看下全双工通信RS-422标准),能更好的节省服务器资源和带宽并达到实时通讯,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是

html5 websocket + node.js 实现网页聊天室

1 client:    socket.io server:   node.js +  express  + socket.io 一个简单的聊天室  demo,没有注册,内置了一些测试用户 2 client 关键代码 var socket = io.connect('http://localhost:8080'); socket.on('connect',function(){ console.log('connected to server'); socket.on('login succes

初识html5 WebSocket

1.  WebSocket概念 WebSocket是HTML5开始提供的一种Client与Server间进行全双工(full-duplex)通讯的网络技术 双工(duplex),指二台通讯设备之间,允许有双向的资料传输 Client和Server通过WebSocket Protocol建立连接后,双方可以互传数据并且双方都可以关闭此连接 2. HTTP概念 HTTP Protocol是无状态协议的,Client和Server通过HTTP Protocol建立连接后,将采用"request-res

打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如下图所示: 一.对Socket Server的要求 我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的接收数据.处理数据.发送数据.为了做到这一点,我们可以构建一个服务端框架,让框架完成透明化的工作