关于WebSocket的那些事儿

众所周知传统的http协议是客户端(浏览器)发送请求,浏览器响应请求的方式,一条请求对应一条响应。若浏览器不主动请求则服务端无法想客户端主动推数据。传统的方式是使用AJAX轮询(这个方式有它的问题)来解决这一问题后面展开讲。

应用场景

列举几个应用场景:

网络聊天室

多人在线游戏

网站向页面实时推送广告、消息

在线实现对控制设备的控制

前面三个应用场景已经有很多大佬讲过了,我就不讲了,这里主要简单分析一下第四个应用场景。

场景4:

家里装有“XX”牌网络摄像机,我现在工作想看看自家“二哈”有没有在拆家,打开改公司提供的app查看家里的情况,很不巧相机现在没有开机,不过可以通过app控制相机开机,点击开机按钮相机开机。但是相机开机需要一段时间。这时传统的做法是通过AJAX轮询的方式每个1秒左右就向服务器发送请求询问设备是否准备就绪。

客户端> 开机没啊,能不能播放视频了呀。

服务端> 还没呢,别着急等会儿再来。

客户端> 开机没啊,能不能播放视频了呀。

服务端> 还没呢,别着急等会儿再来。

客户端> 开机没啊,能不能播放视频了呀。

服务端> 还没呢,别着急等会儿再来。

……

N次之后

……

客户端> 开机没啊,能不能播放视频了呀。。。

服务端> 可以了,你可以播放了

这个看出客户端要通过很多次询问后,才能知道服务端什么时候准备就绪,这样如果发送请求的客户特别多,请求频率特别高这无疑会给服务端造成了不小的压力。

如果有那么一种方式可以让服务端想客户端推送消息,就可以完美解决这一情况,于是WebSocket出现了。

WebSocket的使用

WebSocket是HTML5的新协议,所以支持HTML5的浏览器都能直接使用WebSocket不需要额外安装,什么开发包,或者插件。

为了测试WebSocket我们需要简单的搞一个服务端程序。Node.js本身支持的协议包括TCP协议和HTTP协议,但不支持WebSocket,为了让让node也支持WebSocket,这里我选用ws模块。

测试

创建一个名为testWebSocket的文件夹,使用npm init 初始化项目

关于WebSocket的那些事儿

配置package.json文件添加,这里选用ws的最新的版本

"dependencies": {
  "ws": "^6.2.1"
}

登录后复制

在根目录使用npm指令npm install –save,把ws相关依赖都拉下来。

关于WebSocket的那些事儿

然后创建一个名为myWebSocketServer.js的文件,一个简单的WebSocket服务端程序完成,

node myWebSocketServer.js先让服务端跑起来。相关教程:webSocket 视频教程

// 导入WebSocket模块:
const WebSocket = require('ws');
let i = 1;

// 引用Server类:
const WebSocketServer = WebSocket.Server;

// 实例化:
const myWs = new WebSocketServer({
   port: 8080
});

myWs.on('connection', ws => {
   ws.on('message', message => {
       console.log('received: %s', message);
   });

   setInterval(() => {
       ws.send('Hello siegaii this is serverMessage!' + i);
       i++;
   }, 1000);

});

登录后复制

客户端


html lang="en">
head>
   meta charset="UTF-8">
   title>testtitle>
head>
body>
button id="test">hello siegaiibutton>

script>
   let ws = new WebSocket('ws://localhost:8080/testWebSocket');
   document.getElementById('test').addEventListener('click', () => {
       ws.send('Hello Siegaii this is clientMessage!');
   });

   // 响应onmessage事件:
   ws.onmessage = (msg) => {
       console.log(msg);
   };

script>
body>
html>

登录后复制

运行结果如下

关于WebSocket的那些事儿

API

简单介绍下WebSocket的api

// WebSocket Api
let socket = new WebSocket(url, [protocol] ); // 实例化一个WebSocket对象建立连接
/**
* socket的readyState属性
* 0 - 表示连接尚未建立。
* 1 - 表示连接已建立,可以进行通信。
* 2 - 表示连接正在进行关闭。
* 3 - 表示连接已经关闭或者连接不能打开。
*/
socket.readyState

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

/**
* WebSocket 事件
*/
socket.onopen(); //连接建立时触发
socket.onmessage(); //客户端接收服务端数据时触发
socket.onerror(); //通信发生错误时触发
socket.onclose(); //连接关闭时触发

/**
* WebSocket 方法
*/
Socket.send() //使用连接发送数据
Socket.close() //关闭连接

登录后复制

以上就是关于WebSocket的那些事儿的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2731109.html

(0)
上一篇 2025年3月8日 00:25:16
下一篇 2025年3月2日 04:12:03

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • JS常用正则表达式总汇

    js中正则表达式或“regex”用于匹配字符串的各个部分,本篇文章具有较高的收藏价值,感兴趣的朋友可以了解一下,希望对你有所帮助。 匹配正则 使用 .test() 方法 let testString = “My test string”;l…

    编程技术 2025年3月8日
    200
  • Web学习之怎么使用纹理贴图

    为了使图形能获得接近于真实物体的材质效果,一般会使用贴图,贴图类型主要包括两种:漫反射贴图和镜面高光贴图。其中漫反射贴图可以同时实现漫反射光和环境光的效果。实际效果请看demo:纹理贴图 2D纹理 实现贴图就需要用到纹理,常用的纹理格式有:…

    2025年3月8日
    200
  • OpenLayer怎么实现小车按路径运动

     本篇文章主要讲述的是在openlayer上实现路径运动,下面和小编一起去看看具体都是如何实现的吧,感兴趣的朋友可以看看。 一、需求分析      客户需要的功能就是能在一张Gis图上实现小车根据路径进行移动,为什么一定要Gis呢(这是客户…

    2025年3月8日
    200
  • 带你轻松理解KMP算法

    kmp(the knuth-morris-pratt algorithm)算法用于字符串匹配,从字符串中找出给定的子字符串。但它并不是很好理解和掌握。而理解它概念中的部分匹配表,是理解 kmp 算法的关键。 这里的讨论绕开其背后晦涩难懂的逻…

    编程技术 2025年3月8日
    200
  • js是什么编程语言?

    js全称JavaScript,是一种具有函数优先的轻量级,直译式、解释型或即时编译型的高级编程语言,是一种属于网络的高级脚本语言;JavaScript基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式,如函数式编程。 本教…

    2025年3月8日
    200
  • js中怎么写ajax

    在JavaScript中使用ajax有两个作用: 1.让js去读服务器上面的数据. 2.无刷新的情况下读取服务器上面的数据,例如:验证账号和密码是否正确等. 对于网络请求我们知道有Get 和Post两种,它们之间的区别是什么呢? get方式…

    2025年3月8日
    200
  • JQuery属于什么语言

    jquery是基于JavaScript语言写出来的一个框架,它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,但实质上还是js,所以JQuery也属于网页编程语言。 随着计算机行业的迅速发展,出现了各种各…

    2025年3月8日
    200
  • js中隐藏元素用什么方法

    js中隐藏元素可以使用html中的style属性来实现。具体方法如:【style.display=”block”】,表示控件可见;【style.display=”none”】,表示控件不可见。…

    2025年3月8日
    200
  • 学js需要什么基础?

    javascript一种直译式脚本语言,简称js,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为javascript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html网页上使用,用来给html网页增加…

    2025年3月8日
    200
  • json解析是什么?

    json是一种传递对象的语法,对象可以是name/value对,数组和其他对象。json(javascript object notation) 是一种轻量级的数据交换格式。 它基于JavaScript(Standard ECMA-262 …

    2025年3月8日
    200

发表回复

登录后才能评论