位置: 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组件框架)

  • oppofindx2和pro有什么区别吗(oppofindx2和pro有什么区别)

    oppofindx2和pro有什么区别吗(oppofindx2和pro有什么区别)

  • 苹果11抖音相册权限如何打开(苹果抖音相册权限被禁用怎么设置回来)

    苹果11抖音相册权限如何打开(苹果抖音相册权限被禁用怎么设置回来)

  • 苹果删除的软件怎么恢复(苹果删除的软件在哪里找)

    苹果删除的软件怎么恢复(苹果删除的软件在哪里找)

  • PPT自动保存时间最短为

    PPT自动保存时间最短为

  • 荣耀play反向充电在哪(荣耀play反向充电)

    荣耀play反向充电在哪(荣耀play反向充电)

  • 为什么苹果手机闹钟声音越来越小(为什么苹果手机无线局域网打不开)

    为什么苹果手机闹钟声音越来越小(为什么苹果手机无线局域网打不开)

  • 微信性别怎么修改为空(微信性别在哪修改)

    微信性别怎么修改为空(微信性别在哪修改)

  • 微信下载安装解析包出错怎么办(微信下载安装解压软件)

    微信下载安装解析包出错怎么办(微信下载安装解压软件)

  • 小米无障碍功能打不开(小米无障碍功能怎么用)

    小米无障碍功能打不开(小米无障碍功能怎么用)

  • 苹果11pro max怎么设置动态壁纸(苹果11pro max怎么样)

    苹果11pro max怎么设置动态壁纸(苹果11pro max怎么样)

  • 拼多多保证金需要多少钱(拼多多保证金需要多少钱ID代码是什么)

    拼多多保证金需要多少钱(拼多多保证金需要多少钱ID代码是什么)

  • QQ随心贴怎么关(qq随心贴怎么关闭最新版)

    QQ随心贴怎么关(qq随心贴怎么关闭最新版)

  • 腾讯视频为什么不能全屏播放(腾讯视频为什么看一会就卡住了)

    腾讯视频为什么不能全屏播放(腾讯视频为什么看一会就卡住了)

  • 淘宝的消息怎么一次性删除(淘宝的消息怎么批量删除)

    淘宝的消息怎么一次性删除(淘宝的消息怎么批量删除)

  • pdbm00啥型号的手机(pdbm00啥型号的手机怎么定位)

    pdbm00啥型号的手机(pdbm00啥型号的手机怎么定位)

  • ps文件太大怎么办(ps文件太大怎么改)

    ps文件太大怎么办(ps文件太大怎么改)

  • 电话卡上出现hd是什么意思(电话卡上出现HD是什么意思)

    电话卡上出现hd是什么意思(电话卡上出现HD是什么意思)

  • 南卡蓝牙耳机是国产吗(南卡蓝牙耳机是上市公司吗)

    南卡蓝牙耳机是国产吗(南卡蓝牙耳机是上市公司吗)

  • 百词斩怎弄出pet词汇(百词斩p图)

    百词斩怎弄出pet词汇(百词斩p图)

  • 手机怎么连接小度在家(手机怎么连接小爱同学音箱)

    手机怎么连接小度在家(手机怎么连接小爱同学音箱)

  • 如何把爱奇艺的视频保存到相册(如何把爱奇艺的自动续费关掉)

    如何把爱奇艺的视频保存到相册(如何把爱奇艺的自动续费关掉)

  • 手机关屏时间怎么设置(手机关屏时间怎么调华为)

    手机关屏时间怎么设置(手机关屏时间怎么调华为)

  • 手机连不上wifi是怎么回事电脑可以连网(手机连不上wifi显示已停用是怎么回事)

    手机连不上wifi是怎么回事电脑可以连网(手机连不上wifi显示已停用是怎么回事)

  • 手把手教你基于HTML、CSS搭建我的相册(上)(基于什么意思)

    手把手教你基于HTML、CSS搭建我的相册(上)(基于什么意思)

  • 自来水厂的供水管是什么材质的
  • 车辆购置税计入成本吗
  • 收入支出结余公式原理
  • 税款差0.01是怎么用会计分录处理
  • 境外投资子公司审计报告人民币汇率
  • 工程物资和特种设备区别
  • 售后回租产生的费用
  • 冲销管理费用如何计算
  • 长期合同收入与应收帐款如何处理?
  • 安全生产费纳税调整政策
  • 出口退税的城建税和教育费附加怎么算
  • 股东折价入股会计分录
  • 贴息债券计算公式
  • 出口退税服务
  • 苹果手机移动到新手机
  • 脚手架属于什么费用
  • 公司员工培训后的收获和感想
  • 二手房房屋买卖注意哪些问题
  • CLIP模型原理
  • 运动目标检测算法
  • 微信小程序实现灯泡开关效果
  • 税款差0.05是怎么处理
  • 办公室设计费计入什么
  • 小程序uniapp怎么用
  • 小规模纳税人收入会计分录
  • framework怎么用
  • mlp是啥啊
  • 有趣的html简单代码
  • 可予税前扣除的合理部分
  • lspv命令详解
  • 人力资源公司如何找客户
  • 小规模纳税人无进项票怎么办
  • 微信转账要如何退回去
  • markdown小小白常用语法
  • 王凤林阴盘奇门实例讲解
  • 发票上的抵扣联抵扣联是什么意思
  • 应付货款和应付款的区别
  • 资产负债表中没有专项储备怎么填写
  • 新《准则》适用对象为
  • 管理费用科目包括
  • 无形资产的摊销年限及摊销方法
  • 材料暂估入库的账务处理
  • 融资性售后回租承租方出售资产为什么不缴纳增值税
  • 查补以前年度税款
  • 什么是公允价值变动收益
  • 管理费用抵扣企业所得税的比例
  • 经营利润所得税费用
  • 收承兑汇票的利息怎么算
  • 工程款预缴税
  • 修理费未收到发票怎么办
  • 公司社保收费标准
  • 企业征地款会计分录
  • 微信怎么帮别人代缴社保
  • 电子商务还会继续发展吗
  • sql server数据
  • mysql 判断
  • sql server数据库怎么导出
  • mssql CASE,GROUP BY用法
  • xp系统多了explorer进程
  • debian iso
  • unix系统命令大全
  • linux服务器dns配置
  • 口袋pe下载
  • 密码多次错误被锁定怎么办
  • unable to boot - please use a kernel appropriate for your cpu的解决方法
  • linux程序死机
  • Win10 Build 10586.494稳定版更新修复内容以及KB3172985补丁下载地址
  • win10系统怎么找到桌面
  • NGUI字体图集导致Label文字破碎的BUG以及解决方案
  • 批处理程序教程
  • js oncontextmenu事件使用详解
  • jQuery中ajax错误调试分析
  • 浅谈如何加强基层党组织建设
  • android音频播放器
  • jquery鼠标悬停显示内容
  • js如何保留一位小数
  • 公职律师
  • 贵州税务机关
  • 税务稽查局工资高吗
  • 广东省地方税务局发票在线应用系统
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设