websocket

websocket是HTML5开始提供的一种单个TCP连接上进行全双工通讯的协议。它让客户端和服务端之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性连接,并进行双向数据传输。它能更好的节省服务器资源和带宽,并且能够更实时的通讯。
传统方式采用的是ajax轮询。即在特定的时间间隔,由浏览器对服务器发送http请求,然后由服务器返回最新的数据给客户端。

创建websocket对象

var wx = new WebSocket(url, [protocol]);
url指定连接的URL,protocol可选,指定可接受的子协议

webSocket属性

ws.readyState属性
0 - 表示连接尚未建立
1 - 表示连接已经建立
2 - 表示连接正在进行关闭
3 - 表示连接已经关闭或者连接不能打开

webSocket事件

ws.onopen - 连接建立时触发
ws.onmessage - 客户端接收服务端数据时触发
ws.oclose - 连接关闭时触发
ws.onerroe - 通信发生错误时触发

webSocket方法

ws.send() 使用连接发送数据
ws.close() 关闭连接

示例:

创建两个html文件,模拟两个客户端

<body>
<p>小明</p>
<button id='send'>发送</button>
<input type='text' id='inputText'>
<p id='dispStatus'>正在连接...</p> <script>
var inputText=document.getElementById('inputText');
var dispStatus=document.getElementById('dispStatus');
var ws=new WebSocket('ws://192.168.1.136:8000'); //创建websocket连接,,服务端的IP+端口号
ws.onopen=function(e){ //开始创建连接时的事件
ws.send("xiaoming")
} ws.onmessage=function(e){ //读取服务端接收到的信息
document.getElementById('send').onclick=function(e){
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
var nowTime =hours+":"+minutes+":"+seconds
ws.send(nowTime + "===小明==>" + inputText.value); //向服务端发送输入框中的值
} dispStatus.innerHTML+= "<br/>"+e.data; //信息显示
} ws.onclose = function(){
dispStatus.innerHTM +="<br/>服务器关闭"
} ws.onerror = function() {
dispStatus.innerHTM +="<br/>连接出错"
}
</script>
</body>
<body>
<p>小李</p>
<button id='send'>发送</button>
<input type='text' id='inputText'>
<p id='dispStatus'>正在连接...</p> <script>
var inputText=document.getElementById('inputText');
var dispStatus=document.getElementById('dispStatus');
var ws=new WebSocket('ws://192.168.1.136:8000'); //创建websocket连接,,服务端的IP+端口号
ws.onopen=function(e){ //开始创建连接时的事件
ws.send("xiaoli")
} ws.onmessage=function(e){ //读取服务端接收到的信息 document.getElementById('send').onclick=function(e){
var time = new Date();
var hours = time.getHours();
var minutes = time.getMinutes();
var seconds = time.getSeconds();
var nowTime =hours+":"+minutes+":"+seconds
ws.send(nowTime + "===小李==>" + inputText.value); //向服务端发送输入框中的值
} dispStatus.innerHTML+= "<br/>"+e.data; //将信息显示出来
} ws.onclose = function(){
dispStatus.innerHTM +="<br/>服务器关闭"
} ws.onerror = function() {
dispStatus.innerHTM +="<br/>连接出错"
}
</script>
</body>

server.js模拟服务器

var ws=require("nodejs-websocket");     //引入websocket模块
console.log("开始建立连接..."); //后台打印状态信息 var name1 = null,
name2 = null,
name1Ready = false,
name2Ready = false;
var server=ws.createServer(function(connect){ //创建一个新连接
connect.on("text",function(msg){ //接收触发事件
console.log("收到的消息是:"+msg); //接收到新消息之后在后台打印出来
if(msg === "xiaoming"){
name1 = connect;
name1Ready = true;
name1.sendText("小明连接成功!")
}
if(msg === "xiaoli"){
name2 = connect;
name2Ready = true;
name2.sendText("小李连接成功!")
}
if(name2Ready && name1Ready){
name1.sendText(msg);
name2.sendText(msg);
} // connect.sendText(msg)
});
connect.on("close", function(code, reason) {
console.log("连接关闭")
});
connect.on("error", function(code, reason) { }); }).listen(8000)
console.log("websocket 建立完毕")

html和node.js实现websocket的更多相关文章

  1. 基于node.js 的 websocket的移动端H5直播开发

    这一篇介绍一下基于node.js 的 websocket的移动端H5直播开发, 下载文章底部的源码,我是用vscode打开, 首先在第一个终端运行 npm run http-server 这个指令是运 ...

  2. Windows下Node.js+Express+WebSocket 安装配置

    Linux参考: Linux安装Node.js 使用Express搭建Web服务器 Node.js是一个Javascript运行环境(runtime).实际上它是对Google V8引擎进行了封装.V ...

  3. node.js实现WebSocket

    最近在学习“HTML5游戏开发实战”,其中第8章内容是使用WebSocket来构建多人游戏---<你画我猜>.然而在实现过程中,却一直出错: 客户端请求时,服务器端会报错并终止: 而浏览器 ...

  4. 基于node.js的websocket上传小功能

    一.node.js 在目录里新建index.js var ws = require("nodejs-websocket"); console.log("开始建立连接... ...

  5. 基于node.js的websocket 前后端交互小功能

    一.node var ws = require("nodejs-websocket"); console.log("开始建立连接...") var server ...

  6. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  7. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  8. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  9. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

随机推荐

  1. 利用Intent.ACTION_SEND进行分享

    安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个ACTION_SEND的Intent,系统就为我们弹出一个应用程序列表.其实在系统的文件管理器中,这应该是我们常用 ...

  2. If you are tired...

    如果你累了 1. 深呼吸 放松身体,深呼吸五分钟. 2. 听音乐 静静地听几首歌放松一下就好了,比如王豪学长推荐的追梦赤子心,骄傲的少年. 3. 冥想 放松身体,处于冥想状态. 4. 干洗脸.鸣天鼓. ...

  3. php锁定文本框内容的方法

    有时候我们希望表单中的文本框是只读的,让用户不能修改其中的信息,如<input type="text" name="zg" value="中国& ...

  4. phpwind本地安装 inernal server error错误

    wampserver2.2环境,本地安装phpwind9.0时出错: Internal Server Error The server encountered an internal error or ...

  5. Git 设置 Hook

    Git 设置 hook Hook 就是钩子,在需要的时候调用,根据每个钩子脚本(函数)的返回值决定下一步的操作. 在使用 Git 的过程中,有时候需要定制 Git 以便满足实际的需求. 需求 在一个项 ...

  6. 详细记录vue项目实战步骤(含vue-cli脚手架)

    一.通过vue-cli创建了一个demo. (vue-cli是快速构建这个单页应用的脚手架,本身继承了多种项目模板:webpack(含eslit,unit)和webpack-simple(无eslin ...

  7. C# DialogResult的用法

    在程序中,经常会弹出一个对话框来让用户填写一些信息,填写完成后,当用户点击“确定”按钮后,在主窗体中进行其他的处理.比如一个简单的例子,在主窗体中有一个菜单,是“增加用户”,当点击这个菜单之后,我们需 ...

  8. Asp.Net MVC 5 Razor 视图 未将对象引用到实例

    未将对象引用到实例的错误居然指向了@{Leyout=“..此处略,核实路径无误”}. 最后发现原来是在一个<select .. name="@Model.Category"& ...

  9. 简简单单谈WCF

    另一个系统去访问另一个系统,就是需要使用到分布式通讯咯.. 1. webService   .netfromwork3.5中存在 2. webapi 3. Wcf    scop通讯协议 以上三种都是 ...

  10. Socket网络通信之BIO

    Socket网络通信之BIO 如果要让两台计算机实现通信,需要的条件:ip,port,协议. 目前我们用的最多的就是TCP/IP协议和UDP协议.TCP三次握手,所以比较慢,且安全:UDP速度快,但是 ...