位置: IT常识 - 正文

【node进阶】深入浅出websocket即时通讯(一)(node深入浅出pdf)

编辑:rootadmin
【node进阶】深入浅出websocket即时通讯(一)

推荐整理分享【node进阶】深入浅出websocket即时通讯(一)(node深入浅出pdf),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node基础,nodejs进阶,nodejs进阶,node深入浅出pdf,深入node.js技术栈,nodejs进阶,nodejs 深入浅出,node深入浅出pdf,内容如对您有帮助,希望把文章链接给更多的朋友!

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️ 💯 刷题网站:这段时间有许多的小伙伴在问有没有什么好的刷题网站,博主在这里给大家推荐一款刷题网站:👉点击访问牛客网👈牛客网支持多种编程语言的学习,各大互联网大厂面试真题,从基础到拔高,快来体验一下吧!

🔥前言

在上一章中node的主要内容其实已经结束了,本篇文章从扩展角度去学习当下比较流行的即时通讯技术—websocket,WebSocket并不是全新的协议,而是利用了HTTP协议来建立连接,接下来让我们正式走进websocket的大门!

📃目录为什么需要 WebSocket?WebSocket简介Websocket的特点WebSocket的应用场景服务器支持客户端websocket的 APIWebScoket构造函数ws.onopen()ws.onclose()ws.onmessage()ws.send()node中使用WebSocket客户端使用安装ws模块node中简单使用小结为什么需要 WebSocket?

初次接触 WebSocket ,大家都会问同样的问题:我们已经有了 HTTP 协议,为什么还需要另一个协议?它能带来什么好处? 答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起。 举例来说,我们想了解今天的天气,只能是客户端向服务器发出请求,服务器返回查询结果。HTTP 协议做不到服务器主动向客户端推送信息。

这种单向请求的特点,注定了如果服务器有连续的状态变化,客户端要获知就非常麻烦。我们只能使用"轮询":每隔一段时候,就发出一个询问,了解服务器有没有新的信息。最典型的场景就是聊天室。

轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。因此,工程师们一直在思考,有没有更好的方法。WebSocket 就是这样发明的。

WebSocket简介

服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

为什么WebSocket连接可以实现全双工通信而HTTP连接不行呢?实际上HTTP协议是建立在TCP协议之上的,TCP协议本身就实现了全双工通信,但是HTTP协议的请求-应答机制限制了全双工通信。WebSocket连接建立以后,其实只是简单规定了一下:接下来,咱们通信就不使用HTTP协议了,直接互相发数据吧。

注意:WebSocket连接必须由浏览器发起,因为请求协议是一个标准的HTTP请求

Websocket的特点建立在 TCP 协议之上,服务器端的实现比较容易。与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。数据格式比较轻量,性能开销小,通信高效。可以发送文本,也可以发送二进制数据。没有同源限制,客户端可以与任意服务器通信。协议标识符是ws(如果加密,则为wss),服务器网址就是 URL(例如:ws://localhost:8080)。 WebSocket的应用场景

弹幕

媒体聊天

【node进阶】深入浅出websocket即时通讯(一)(node深入浅出pdf)

协同编辑(我们常用的在线编辑)

基于位置的应用(例如:美团外卖中我们可以实时查看外卖小哥的位置,距离目的地的距离)

体育实况更新(腾讯体育nba直播技术统计的数据实时更新)

股票基金报价实时更新

服务器支持

由于WebSocket是一个协议,服务器具体怎么实现,取决于所用编程语言和框架本身。Node.js本身支持的协议包括TCP协议和HTTP协议,要支持WebSocket协议,需要对Node.js提供的HTTPServer做额外的开发。已经有若干基于Node.js的稳定可靠的WebSocket实现,我们直接用npm安装使用即可。

客户端websocket的 APIWebScoket构造函数const ws = new WebSocket(`ws://localhost:8080?token=${localStorage.getItem("token")}`)

WebSocket 对象作为一个构造函数,用于新建 WebSocket 实例。执行上面语句之后,客户端就会与服务器进行连接。 注意: 在这里传入的参数url中可以携带token,可以进行登录鉴权!

ws.onopen()

实例对象的onopen属性,用于指定连接成功后的回调函数。

ws.onopen = () => { console.log('连接成功!');}ws.onclose()

实例对象的onclose属性,用于指定连接关闭后的回调函数。

ws.onclose = () => { console.log('关闭成功!')}ws.onmessage()

实例对象的onmessage属性,用于指定收到服务器数据后的回调函数。

ws.onmessage = (msgObj) => {//...在这里进行逻辑操作}

注意:这里的形参是服务器传来的数据对象,msgObj.data可以访问到服务端返回的具体信息数据

ws.send()

实例对象的send()方法用于向服务器发送数据。

ws.send('hello websocket')node中使用WebSocket客户端使用var ws = new WebSocket(`ws://localhost:8080?token=${localStorage.getItem("token")}`)ws.onopen = () => { console.log("open") ws.send(JSON.stringify({ type: WebSocketType.GroupList })) }ws.onmessage = (evt) => { console.log(evt.data)}

在上面我们对客户端的方法做了一个了解后,将对服务端进行了解!=>node中使用websocket官网

安装ws模块 npm install wsnode中简单使用const WebSocket = require("ws")const WebSocketServer = WebSocket.WebSocketServer//创建websocket服务,端口号为8080,与客户端请求的端口号保持一致const wss = new WebSocketServer({ port: 8080 });wss.on('connection', function connection(ws) {// connection,表示连接客户端,形参中的ws代表我们的客户端 ws.on('message', function message(data, isBinary) { //这里表示只要ws标记的客户端给我们发送消息,我们通过监听message可以得到前台发过来的消息 wss.clients.forEach(function each(client) { //wss.clients存放着连接到我们服务器所有的客户端,通过遍历,将客户端的消息转发给其他客户端,从而实现群聊 if (client !== ws && client.readyState === WebSocket.OPEN) { //这里client!==ws 目的是群发的时候不给自己发消息 client.send(data, { binary: false }); //在这里binary:false表示返回的数据不是二进制类型! } }); }); ws.send('欢迎加入聊天室'); //给客户端返回信息});

注意:上述代码中ws实质上是一个句柄,(按照我的理解就是:ws代表我们打开的浏览器窗口,每打开一个窗口,ws就代表不同的窗口,代表不同的客户端),用来指示服务端指向客户端的唯一标识

小结

WebScoket整体来说的话不是很难,只是比较繁琐罢了,前后端必须要进行一对一的匹配,也就是说,有来就有回,本篇为wensocket学习的第一阶段而已,后面的文章将会切入到群聊、私聊的demo中去体验一下!

👑书写不易,希望大家能够给予三连支持,期待我更好的文章哟👑

本文链接地址:https://www.jiuchutong.com/zhishi/299509.html 转载请保留说明!

上一篇:小迪安全day08信息收集-架构,搭建,WAF(小迪安全2021)

下一篇:【React】组件三大核心属性(react组件框架)

  • 行程卡验证码为什么收不到(行程卡验证码收费吗)

    行程卡验证码为什么收不到(行程卡验证码收费吗)

  • 抖音怎么开通团购(抖音怎么开通团购带货)

    抖音怎么开通团购(抖音怎么开通团购带货)

  • opporeno4pro怎么插卡(opporeno4pro怎么插双卡)

    opporeno4pro怎么插卡(opporeno4pro怎么插双卡)

  • 什么是多媒体个人计算机(啥是多媒体)

    什么是多媒体个人计算机(啥是多媒体)

  • 路由器信号差的原因(路由器信号差的原因及解决办法)

    路由器信号差的原因(路由器信号差的原因及解决办法)

  • win10蓝屏0xc0000001(win10蓝屏0xc0000001如何重装系统)

    win10蓝屏0xc0000001(win10蓝屏0xc0000001如何重装系统)

  • 苹果11没有声音怎么回事(苹果11没有声音打游戏)

    苹果11没有声音怎么回事(苹果11没有声音打游戏)

  • 转存失败请稍后再试111(转存失败请稍后再试4)

    转存失败请稍后再试111(转存失败请稍后再试4)

  • 淘宝是腾讯的吗(淘宝是腾讯的吗大王卡免费吗)

    淘宝是腾讯的吗(淘宝是腾讯的吗大王卡免费吗)

  • 手机酷狗怎么设置歌词背景(手机酷狗怎么设置下载mp3格式的歌曲)

    手机酷狗怎么设置歌词背景(手机酷狗怎么设置下载mp3格式的歌曲)

  • 华为nova7和nova7pro区别(华为nova7和nova7pro的外观区别)

    华为nova7和nova7pro区别(华为nova7和nova7pro的外观区别)

  • b站一个手机号可以绑定几个账号(b站一个手机号怎么开小号)

    b站一个手机号可以绑定几个账号(b站一个手机号怎么开小号)

  • 红米note8pro电池耐用吗(红米note8Pro电池多少钱)

    红米note8pro电池耐用吗(红米note8Pro电池多少钱)

  • 小米不能双击熄屏(小米不能双击锁屏)

    小米不能双击熄屏(小米不能双击锁屏)

  • vivox20多久出来的 (vivox20什么时候出的手机)

    vivox20多久出来的 (vivox20什么时候出的手机)

  • iphone xr独有功能(苹果xr特色功能)

    iphone xr独有功能(苹果xr特色功能)

  • 数据库和逻辑模型有哪四种(数据库和逻辑模型的区别)

    数据库和逻辑模型有哪四种(数据库和逻辑模型的区别)

  • 微信不震动了怎么回事(微信不震动了怎么办)

    微信不震动了怎么回事(微信不震动了怎么办)

  • 抖音抢镜怎么调大小(抖音抢镜怎么调画质)

    抖音抢镜怎么调大小(抖音抢镜怎么调画质)

  • 怎么听别人撤回的语音(怎么看别人撤回的语音)

    怎么听别人撤回的语音(怎么看别人撤回的语音)

  • 苹果11pro max双卡双待怎么设置(苹果11promax双卡双待吗)

    苹果11pro max双卡双待怎么设置(苹果11promax双卡双待吗)

  • 小米6xotg功能在哪里

    小米6xotg功能在哪里

  • 表格里的减法公式怎么设置(表格里的减法公式怎么设置出来)

    表格里的减法公式怎么设置(表格里的减法公式怎么设置出来)

  • 怎么恢复朋友圈被屏蔽的微信好友(怎么恢复朋友圈背景原图)

    怎么恢复朋友圈被屏蔽的微信好友(怎么恢复朋友圈背景原图)

  • iphonexr双卡怎么放(iphonexr双卡怎么使用)

    iphonexr双卡怎么放(iphonexr双卡怎么使用)

  • Mac桌面整理技巧教你如何一键收纳多个文件到一个文件夹(mac桌面怎么整理)

    Mac桌面整理技巧教你如何一键收纳多个文件到一个文件夹(mac桌面怎么整理)

  • 新成立的公司不开户可以吗
  • 增值税进项发票怎么做账
  • 什么叫做供应链公司
  • 企业筹集资金的最常见及最主要的方式是()
  • 叉车上牌流程需要多少时间
  • 客观原因导致的没见过世面
  • 企业卖旧房如何计算缴纳土地增值税
  • 控股合并的会计准则
  • 员工借款会计科目
  • 关于半年度净资产的公告
  • 退租未摊销的装修费会计分录怎么写
  • 代扣代缴个人所得税手续费返还 增值税
  • 288000元大写怎么写
  • 服务费计入什么收入
  • 公司内部领用库存商品
  • 企业所得税税率2.5% 5% 25%
  • 管理费用金额多做了,如何减少
  • 公益事业捐赠
  • qq上的时间和手机不一样怎么办
  • 电脑找不到休眠设置了
  • 什么是毛利润和纯利润
  • 矿山机械设备租赁有限公司
  • 公司清理固定资产怎么开票
  • php 静态
  • 期间损益结转有余额
  • 企业并购的基本方法有
  • 土地使用税若干问题的补充规定
  • 360路由器怎么连接网络
  • 事业单位财产清查内容包括
  • 收到电子退库如何入账
  • 谷歌浏览器被hao123锁定改不了
  • 出差补贴应该怎么入账
  • 建筑行业预交增值税税率是多少
  • 净资产怎么增长
  • 商品出入库台账
  • 货物入库会计分录怎么做
  • 帝国cms首页调用显示标题图片代码
  • 车船使用税的征收标准是多少
  • 销售赠品入什么科目
  • 本期发生的下列业务中,根据权责发生制原则
  • 个税赡养老人作废后无法修改
  • SQL SERVER中关于exists 和 in的简单分析
  • mysql 5.5 5.6 5.7
  • mysql文件更改存放路径
  • 金税四期有什么变化
  • 去年城建税多计提了怎么办
  • 以货物抵债的会计分录
  • 跨月普票发票怎么红冲
  • 对供应商的罚款需要开票吗
  • 境外中资企业再投资
  • 增值税政策依据
  • 出口退税的计算与流程
  • 抵扣认证的发票怎么冲红
  • 什么是限售股融券
  • 银行受理汇票贴现业务
  • 公司转让二手车需要缴纳什么税
  • 计提资产减值是好事还是坏事
  • sql server数据表
  • mysql分组后取最新的一条记录
  • win8.1重置电脑
  • win10搜索类型
  • win10改用microsoft账户登录
  • 系统技巧 制作流程
  • 'GL_COMBINE_ARB' : undeclared 'GL_RGB_SCALE_ARB' : undeclared 问题
  • javascript怎么弄
  • es6字符串模版
  • python语言基础与应用答案
  • vue前端后端
  • linux 编译
  • shell脚本输入
  • 利用Matplotlib对一组数据进行分析
  • android教学
  • python计算文件大小
  • unity3d鼠标点击移动
  • ca钥匙登陆不了电子税务局
  • 北京市社会团体
  • 广东省电子税务局网上办税大厅
  • 夫妻相聚
  • 企业登录密码是几位数
  • 2020年青海国税工资待遇
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设