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. HDU5593 ZYB's Tree 树形DP +分治

    感觉其实就是树分治,一次BC的题,感觉这次题目质量比较高,仅代表蒟蒻的看法 一次DFS获取每个点到子树的距离不大于K的点的个数, 然后一遍BFS获取从每个点父亲不大于K的的个数,层层扩展,还是想说 其 ...

  2. 深入浅出 JavaScript 对象 v0.5

    JavaScript 没有类的概念,因此它的对象与基于类的语言中的对象有所不同.笔者主要参考<JS 高级程序设计>.<JS 权威指南>和<JS 精粹> 本文由浅入深 ...

  3. uva 12296 Pieces and Discs

    题意: 有个矩形,左下角(0,0),左上角(L,W). 思路: 除了圆盘之外,本题的输入也是个PSLG,因此可以按照前面叙述的算法求出各个区域:只需把线段视为直线,用切割凸多边形的方法 :每次读入线段 ...

  4. Good practice release jar to Nexus

    Step  suppose you need to develop a feature,when you finish the feature ,you need to release the jar ...

  5. 题解西电OJ (Problem 1004 -亚特兰提斯)--最小生成树

    Description 为了找寻沉睡的亚特兰提斯大陆,wm来到了大西洋上进行探险,找了半个月仍一无所获.然而在一次突袭而来的暴风雨后,wm的船莫名地驶入了一片未知的区域,发现了一个地图上未标记的岛屿, ...

  6. Java按字节截取字符串(GBK编码、UTF-8编码实现)

    package FileDemo; import java.io.IOException; public class CutStringTest { /** * @param args * @thro ...

  7. UIViewController生命周期测试

    push进入  -[NaviRootVC viewWillDisappear:]  -[NextVC viewWillAppear:]  -[NextVC viewWillLayoutSubviews ...

  8. android应用的界面编程----View与ViewGroup的概念

    1 UI OverView Android中所有的UI元素都是通过View与ViewGroup来构建的,View是指屏幕中一块可与用户进行交互的空白,类似于java界面编程中的JPanel.为了界面布 ...

  9. java正则表达式入门基础

    一.正则表达式术语 1)元字符 : 非一般字符,具有某种意义的字符.如 : \bX : \b边界符, 以 X开始的单词 2) 常用 : \d : 匹配一个数字 : \d ,  匹配至少一个以上数字 \ ...

  10. android应用程序fps meter[帧数显示]的分析 —— 浅谈root的风险 (3)

    上节已经详细说了下注入过程,最后寄生进程在宿主进程中下了个蛋,这下完的蛋有什么作用呢?接下来再具体分析一下. lib0的感染过程分析 对于本例注入的so动态库,首先看一下so的符号: $ readel ...