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