一,概念

WebSocket的定义

WebSocket是html5提供的一种在单个TCP连接上进行双向通信的协议,解决了客户端和服务端之间的实时通信问题。
浏览器和服务器只需完成一次握手,两者之间就可以创建一个持久性的TCP连接,此后服务器和客户端通过此TCP连接进行双向实时通信。

WebSocket的优点

很多网站为了实现数据推送,所用的技术都是ajax轮询。轮询是在特定的时间间隔,由浏览器主动发起请求,将服务器的数据拉回来。轮询需要不断的向服务器发送请求,会占用很多带宽和服务器资源。
WebSocket建立TCP连接后,服务器可以主动给客户端传递数据,能够更好的节省服务器资源和带宽,实现更实时的数据通讯。

ajax轮询模式: //轮询需要不断的向服务器发送请求,会占用很多带宽和服务器资源

function doPolling(type, url, data, delay = 3000) {return new Promise((resolve, reject) =>{ajax[type](url, data).then(res => {if (res.data === 'polling') { // 启动轮询setTimeout(() => {resolve(doPolling(type, url, data, delay));}, delay)} else {resolve(res);}})})
}

二,WebSocke的属性

属性 描述
socket.readyState
只读属性,表示websocket链接状态:
0,表示连接尚未建立

1,表示连接已经建立,可以进行通信

2,表示连接正在进行关闭

3,表示连接已经关闭或连接不能打开

socket.bufferedAmount 只读属性,已经被send()放入队列中等待传输,但是还没有发出的utf-8文本字节数

三,WebSocket的方法

方法 描述
socket.send() 使用连接发送数据
socket.close() 关闭连接

四,WebSocket的实例

WebSocket协议本质上是一个基于TCP的协议,为了建立一个WebSocket连接,浏览器需要向服务器发起一个HTTP请求,这个请求和普通的HTTP请求不同,它包含了一些附加头信息,服务器解析这些附加头信息后产生应答信息返回给客户端,客户端和服务端的WebSocket连接就建立起来了,双方可以通过连接通道自由的传递信息,并且这个连接会持续存在直到客户端或服务端某一方主动关闭连接。

function webSocket(){if("WebSocket" in window){console.log("您的浏览器支持WebSocket");var ws = new WebSocket("ws://localhost:8080"); //创建WebSocket连接//...}else{console.log("您的浏览器不支持WebSocket");}
}

五,WebSocket的事件

1, 客户端支持WebSocket的浏览器中,在创建socket后,可以通过onopen、onmessage、onclose和onerror四个事件对socket进行响应。

2, WebSocket的所有操作都是采用事件的方式触发的,这样不会阻塞UI,UI有更快的响应时间,有更好的用户体验。

3, 浏览器通过Javascript向服务器发出建立WebSocket连接的请求,连接建立后,客户端和服务器就可以通过TCP连接直接交换数据。
4, 当你获取WebSocket连接后,可以通过send()方法向服务器发送数据,可以通过onmessage事件接收服务器返回的数据。

var ws = new WebSocket("ws://localhost:8080");
//申请一个WebSocket对象,参数是服务端地址,同http协议使用http://开头一样,WebSocket协议的url使用ws://开头,另外安全的WebSocket协议使用wss://开头
ws.onopen = function(){//当WebSocket创建成功时,触发onopen事件console.log("open");ws.send("hello"); //将消息发送到服务端
}
ws.onmessage = function(e){//当客户端收到服务端发来的消息时,触发onmessage事件,参数e.data包含server传递过来的数据console.log(e.data);
}
ws.onclose = function(e){//当客户端收到服务端发送的关闭连接请求时,触发onclose事件console.log("close");
}
ws.onerror = function(e){//如果出现连接、处理、接收、发送数据失败的时候触发onerror事件console.log(error);
}

JS WebSocket概况和要点相关推荐

  1. node.js Websocket消息推送---GoEasy

    Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送支持websocket 和 ...

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

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

  3. socket服务器断开消息,详解JS WebSocket断开原因和心跳机制

    1.断开原因 WebSocket断开的原因有很多,最好在WebSocket断开时,将错误打印出来. ws.onclose = function (e) { console.log('websocket ...

  4. js websocket发送文本与二进制实验

    序言 传统的html网页, 其实更适合 http协议 目前的前后端分离架构,其实非常适合 websocket协议通信 所以有必要对websocket 深入研究 js websocket发送文本与二进制 ...

  5. websocket如何区分用户_Node.js Websocket如何区分不同的用户

    本篇教程介绍了Node.js Websocket如何区分不同的用户,希望阅读本篇文章以后大家有所收获,帮助大家对Node.js的理解更加深入. < 通过param1,param2来管理不同的ws ...

  6. js websocket断线重连

    js websocket断开重连实例代码,请根据自己需求做出相应改动Vue中使用websocket $(function() {var lockReconnect = false;//避免重复连接va ...

  7. js websocket同步等待_WebSocket硬核入门:200行代码,教你徒手撸一个WebSocket服务器...

    本文原题"Node.js - 200 多行代码实现 Websocket 协议",为了提升内容品质,有较大修订. 1.引言 最近正在研究 WebSocket 相关的知识,想着如何能自 ...

  8. Node.js Websocket 井字棋游戏

    https://cs.lmu.edu/~ray/notes/websockets/ ws_tictactoeserver.js // A server for a multi-player tic t ...

  9. HTML+JS+websocket 实现联机“游戏王”对战(十三)- 实机演示视频

    最后一章啦,这章主要放个demo演示,然后讨论一些待改进的细节问题. 目录: 游戏王联机卡牌对战 1 - 前言 游戏王联机卡牌对战 2 - 联机模式 游戏王联机卡牌对战 3 - 界面布局 游戏王联机卡 ...

最新文章

  1. ACMNO.37 C语言-数字交换 输入10个整数,将其中最小的数与第一个数对换,然后把最大的数与最后一个数对换。写三个函数; ①输入10个数;②进行处理;③输出10个数。
  2. vue中引入jquery报错问题
  3. Arduino IDE增加ATmega32开发选项遇到的问题
  4. linux下应用程序性能剖分神器gprofiler-tools-安装和使用
  5. alter table add column多个字段_SQL对表中字段的操作 alter
  6. ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
  7. 在RHEL5下实现RAID5磁盘阵列
  8. ad中电源插座怎么封装_您可以在房屋中安装的各种电源插座
  9. Java中的堆分配参数总结《对Java的分析总结》(二)
  10. Extjs4快速上手四——实现菜单
  11. 鸿蒙系统下载地址_华为鸿蒙代码全开源,老规矩:先跑个Hello World....
  12. 如何批量删除.svn文件
  13. SpringBoot项目中快速集成腾讯云短信服务SDK实现手机验证码功能
  14. 基于springboot助学贷款管理毕业设计源码061528
  15. DEBUG:谷歌学术无法创建账号
  16. 软考中级 真题 2016年上半年 信息系统管理工程师 基础知识
  17. 怎样快速查询多个天天欧洲物流单号的在途信息
  18. pytorch BatchNorm参数详解,计算过程
  19. Android应用图标上的小红点Badge实现
  20. [GYCTF2020]Ez_Express

热门文章

  1. 如何清除U盘使用记录?
  2. 最小生成树-深入理解
  3. Flutter 使用http库进行文件上传
  4. 5.12汶川地震,19楼逃生
  5. ubuntu15.04 32位下基于IRSTLM,GIZA++和Moses的统计翻译系统的环境搭建及运行
  6. 【工业互联网】产业互联网
  7. 解决IDEA安装出现NSIS错误的问题
  8. linux自带终端访问com口,配置实现通过串口(com 口、RS232 接口)终端控制 Linux 系统...
  9. Ubuntu下android刷机教程
  10. 异构数据源导redis不用找了!DataX二次开发插件rediswriter已上菜