WebSocket简介

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

WebSocket 原理

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

WebSocket API 及文档

常用方法:
  send(data
事件:
  onopen
  onmessage
  onerror
  onclose 

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
 
 
 

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

  1. HTML5 WebSocket和后端C#通信

    1.使用 HTML5 开发离线应用 http://www.ibm.com/developerworks/cn/web/1011_guozb_html5off/ 2.利用html 5 websocket ...

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

    HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...

  3. 让ie6 7 8 9支持原生html5 websocket

      让ie6 7 8 9支持原生html5 websocket   从github上的 web-socket-js(socket.io好像也是用这个做的他们的flash替代传输方式)改过来的.不过值得 ...

  4. 使用 HTML5 WebSocket 构建实时 Web 应用

    原文地址:http://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/ HTML5 WebSocket 简介和实战演练 本文主要介绍 ...

  5. (转)使用 HTML5 WebSocket 构建实时 Web 应用

    HTML5 WebSocket 简介和实战演练 本文主要介绍了 HTML5 WebSocket 的原理以及它给实时 Web 开发带来的革命性的创新,并通过一个 WebSocket 服务器和客户端的案例 ...

  6. Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

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

    随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如 ...

  8. 使用 HTML5 webSocket API实现即时通讯的功能

    project下载地址:http://download.csdn.net/detail/wangshuxuncom/6430191 说明: 本project用于展示怎样使用 HTML5 webSock ...

  9. python与html5 websocket开发聊天对话窗

    1.下载必须的包 https://github.com/Pithikos/python-websocket-server,解压缩并把文件夹名‘python-websocket-server-maste ...

随机推荐

  1. keybd_event跟SendMessage,PostMessage模拟键盘消息的区别 z

    首先你会发现keybd_event函数中是没有窗口句柄作为参数的,好奇的你一定会觉得很奇怪,那是因为,keybd_event是全局模拟按键的,只对前台窗口(即当前的活动窗口)才可以,但是如果模拟的按键 ...

  2. Month Calendar

    http://www.codeproject.com/Articles/10840/Another-Month-Calendar#xx4614180xx Another Month Calendar ...

  3. theano学习指南5(翻译)- 降噪自动编码器

    降噪自动编码器是经典的自动编码器的一种扩展,它最初被当作深度网络的一个模块使用 [Vincent08].这篇指南中,我们首先也简单的讨论一下自动编码器. 自动编码器 文献[Bengio09] 给出了自 ...

  4. sys.argv[]基本用法

    #python 3.4.2 #windows系统下可以在CMD下执行 python test.py 第一参数 第2个参数 #空格分隔每个参数,sys.argv[]是用来获取命令行参数的 #引用必要的包 ...

  5. 进程隐藏与进程保护(SSDT Hook 实现)(二)

    文章目录:                   1. 引子 – Demo 实现效果: 2. 进程隐藏与进程保护概念: 3. SSDT Hook 框架搭建: 4. Ring0 实现进程隐藏: 5. Ri ...

  6. 数电课设——琐碎

    这几天没有更新过网站了,也没继续开发VellLock了,可是感觉还是没有闲着,一直在跟下面的一些元器件在打交道,当然下面的都是小儿科,英文文档都看得我快吐血了.数电基本属于棺材边上过的我,是各种头大, ...

  7. [坑]c#中double转字符串精度丢失问题记录

    在项目遇到了一个比较大的double值,然后出现了一些意想不到的状况: double b=1141.161994934082; b.ToString();//'1141.16199493408' 然后 ...

  8. 曝光卖假币的店铺和旺旺ID

    1:店铺名称:九玖邮币 掌柜ID:九玖邮币[此人较贼,价格只比我们低一点,图用的不太清晰的,或者直接用真品图,而且卖假币卖到2钻了,很多人上当了.]1.5 店铺名称:聚鑫钱币 掌柜ID:聚鑫钱币 [1 ...

  9. 问题-Delphi控件选择卡自动选择与滚动方法

    问题现象: 在D7的控件工具条中每次要手动点向左向右很累,有没有方法可以自动移动.   问题解决: REGEDIT4 [HKEY_CURRENT_USER\Software\Borland\Delph ...

  10. 转载SSIS中的容器和数据流—举例说明数据转换任务

    在上一个随笔中我们熟悉了数据流任务,现在来做一个例子,通过实践学习这些介绍的内容.这个例子从AdventureWorks数据库中取得数据,然后对数据进行聚合,排序,计算产生新列操作并输入到一个.csv ...