位置: IT常识 - 正文

【node进阶】在node.js中优雅的使用Socket.IO模块(node-)

编辑:rootadmin
【node进阶】在node.js中优雅的使用Socket.IO模块

推荐整理分享【node进阶】在node.js中优雅的使用Socket.IO模块(node-),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:node no,node num,node in,nodecideo,node num,node no,node 入门,node num,内容如对您有帮助,希望把文章链接给更多的朋友!

✅ 作者简介:一名普通本科大三的学生,致力于提高前端开发能力 ✨ 个人主页:前端小白在前进的主页 🔥 系列专栏 : node.js学习专栏 ⭐️ 个人社区 : 个人交流社区 🍀 学习格言: ☀️ 打不倒你的会使你更强!☀️

🔥前言

上篇文章中结合websokcet进行了简单的聊天小案例,但是我们可以发现使用ws模块来写代码的时候未免有一些繁琐,需要我们自己去设置type,使用socket.io后事件监听将会十分的简单便捷,很好的弥补了ws模块的缺陷。

📃目录Socket.IO的定义Socket.IO的优点node中安装Socket.IOnode中使用Socket.IOemiton在express中引入使用服务端客户端小结Socket.IO的定义

Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的node.js,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用。

Socket.IO将WebSocket、AJAX和其它的通信方式全部封装成了统一的通信接口,也就是说,我们在使用SocketIO时,不用担心兼容问题,底层会自动选用最佳的通信方式。

Socket.IO的优点socket.io封装了服务端和客户端,使用起来非常简单方便。socket.io支持跨平台,这就意味着你有了更多的选择,可以在自己喜欢的平台下开发实时应用。socket.io可以自定义事件发送到对端,对端可以是服务器,可以是客户端;使用emit发送,接收还是on。它会自动根据浏览器从WebSocket、AJAX长轮询、Iframe流等等各种方式中选择最佳的方式来实现网络实时应用,非常方便和人性化,而且支持的浏览器最低达IE5.5。如果不支持websocket,可以自动降级为轮询node中安装Socket.IO

打开终端,在终端中输入以下代码即可安装Socket.IO模块:

npm i socket.ionode中使用Socket.IO

emit 和 on 是最重要的两个api,分别对应 发送 和 监听 事件.

【node进阶】在node.js中优雅的使用Socket.IO模块(node-)

我们可以非常自由的在服务端定义并发送一个事件emit,然后在客户端监听 on,反过来也一样。

发送的内容格式也非常自由,既可以是基本数据类型 Number,String,Boolean 等,也可以是 Object,Array 类型,甚至还可以是函数。而用回调函数的方式则可以进行更便携的交互。

emit

socket.emit(eventName[, ...args]):发射(触发)一个事件

socket.emit('aaa','你好,前台')

在这里以服务端为例子:在服务端中通过socket.emit()方法创立一个事件(第一个参数:自定义事件)aaa,发送的信息(第二个参数) 你好,前台.

注意: 第二个参数可以传对象,因为在emit方法内部带有JSON.stringfy()方法,自动将对象转化为字符串。

on

socket.on(eventName, callback):监听一个 emit 发射的事件

socket.on('aaa',(msg)=>{console.log(msg)})

在这里以客户端为例,客户端监听服务端的事件aaa,随后通过回调函数的方式打印出aaa传过来的信息。

在express中引入使用服务端const server = require('http').createServer(app);const io = require('socket.io')(server);io.on('connection', socket => {console.log('恭喜你连接成功!')socket.on("message",(msg)=>{console.log(msg) //你好 后台//注意 : 这里的 io.emit() 是默认转发给全部客户端信息,所有客户端都可以收到io.emit("allMsg","广播 : 欢迎来到聊天室")})});server.listen(3000);

将server当作参数传入,目的在于说明io挂载的服务依旧是基于http的。 这里的代码表示,只要连接成功,就会打印连接成功的信息!

客户端<script src="/socket.io/socket.io.js"></script><script> const socket = io(); //默认连接服务端启动的本地端口地址 socket.emit("message","你好 后台") // 监听服务端的广播事件,接收广播的消息 socket.on("allMsg",(msg)=>{console.log(msg) //广播 : 欢迎来到聊天室 })</script>

在客户端需要单独引用socket.io.js文件,因为socket.io不是浏览器内置模块,需要单独引用,js文件内部代码 ==> socket.io.js内部代码,将这里的代码复制到自己创建的js文件中,然后在客户端中引用。 只要在客户端中出现const socket = io(),浏览器将会直接默认连接到客户端启动的本地服务地址。

小结

socket.io这个第三方模块相对来说,书写代码的时候更加的方便与高效,在ws模块中通过switch分支来进行对不同的聊天类型进行不同的方法呈现,而在socket.io模块中仅仅通过自定义事件就可以解决这个问题,并且socket.io可以在服务器断开后,当你再次进入客户端后可以自动连接,整体的表现优于ws模块。

下篇文章将会对群聊和私聊进行"socket.io化"升级!

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

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

上一篇:处理vue中的长按事件、点击事件、默认事件冲突(vue点击按钮显示对应的内容)

下一篇:前端经典面试题 | 吊打面试官系列 之 Vue2和Vue3的区别(前端经典面试题讲解)

  • 华为watchfitnew怎么设置表盘(华为watchfitnew怎么换表带)

    华为watchfitnew怎么设置表盘(华为watchfitnew怎么换表带)

  • 朋友圈保存别人的视频别人会知道吗(如何发到朋友圈)

    朋友圈保存别人的视频别人会知道吗(如何发到朋友圈)

  • 苹果原壁纸如何设置(苹果原装壁纸怎么保存)

    苹果原壁纸如何设置(苹果原装壁纸怎么保存)

  • 抖音井号作用(抖音里加井号)

    抖音井号作用(抖音里加井号)

  • 手机屏开胶了怎样处理(手机屏开胶了怎么办危险么)

    手机屏开胶了怎样处理(手机屏开胶了怎么办危险么)

  • 华为p40pro特色功能(华为p40pro有什么特色功能)

    华为p40pro特色功能(华为p40pro有什么特色功能)

  • 显卡1650s和1660差距(显卡1650s和1660s)

    显卡1650s和1660差距(显卡1650s和1660s)

  • 华为nova7se手机怎么截屏(华为nova7se手机空调遥控器在哪里)

    华为nova7se手机怎么截屏(华为nova7se手机空调遥控器在哪里)

  • e3和e5有什么区别(e3跟e5)

    e3和e5有什么区别(e3跟e5)

  • 喇叭声音变小的原因(喇叭变得很小声)

    喇叭声音变小的原因(喇叭变得很小声)

  • 手机摔过后有什么影响(手机摔了后会影响性能吗)

    手机摔过后有什么影响(手机摔了后会影响性能吗)

  • vivox30有曲面屏吗(vivoy30是曲面屏吗)

    vivox30有曲面屏吗(vivoy30是曲面屏吗)

  • kindle七天试用后必须续费吗(kindle试用期过了之后之前借阅的能看不)

    kindle七天试用后必须续费吗(kindle试用期过了之后之前借阅的能看不)

  • word页边距怎么设置(word页边距怎么只设置一页)

    word页边距怎么设置(word页边距怎么只设置一页)

  • 手机语音助手怎么打开(手机语音助手怎么老是弹出来了怎么关闭)

    手机语音助手怎么打开(手机语音助手怎么老是弹出来了怎么关闭)

  • word 怎么加入参考文献(如何在word文档中添加参考文献)

    word 怎么加入参考文献(如何在word文档中添加参考文献)

  • 苹果xs开机菜单导航怎么关闭(苹果xs开机菜单怎么设置)

    苹果xs开机菜单导航怎么关闭(苹果xs开机菜单怎么设置)

  • 网络攻击的4个类型(网络攻击的主要4个类型)

    网络攻击的4个类型(网络攻击的主要4个类型)

  • 手机丢了银行卡安全吗(手机丢了银行卡绑定手机怎么办)

    手机丢了银行卡安全吗(手机丢了银行卡绑定手机怎么办)

  • 网上支付的含义(网上支付的含义和功能)

    网上支付的含义(网上支付的含义和功能)

  • 数据库事务原理是什么(数据库事务原理实验报告)

    数据库事务原理是什么(数据库事务原理实验报告)

  • 360重装系统在哪里(360系统重装在哪打开)

    360重装系统在哪里(360系统重装在哪打开)

  • 华硕笔记本预装win8改win7系统完美解决方案(全程图解)(华硕笔记本预装win10改装win7,有图文教程)

    华硕笔记本预装win8改win7系统完美解决方案(全程图解)(华硕笔记本预装win10改装win7,有图文教程)

  • 电脑连上wifi上不了网是怎么回事?(电脑连上WiFi上不了网怎么办?)

    电脑连上wifi上不了网是怎么回事?(电脑连上WiFi上不了网怎么办?)

  • 解决雪花算法生成的ID传输前端后精度丢失(雪花算法workid)

    解决雪花算法生成的ID传输前端后精度丢失(雪花算法workid)

  • 所得税的会计分录怎么做
  • 个人偶然所得税率多少
  • 五万元劳务费税率
  • 怎么收购股份公司
  • 软件租赁费计入哪个科目
  • 其他债券投资有减值,为什么其他权益工具投资没有减值
  • 短期借款明细账应采用三栏式账页格式
  • 企业级软件开发
  • 网络服务费属于什么费用
  • 房地产开发企业预缴增值税
  • 正版手写
  • 除了缴纳的税金还有什么
  • 分类账和明细账平行登记规则
  • 怎么扣除未支付的钱
  • 生产企业购进的用于生产的机器设备
  • 出口增值税发票金额怎么开
  • 机关和事业单位哪个好
  • 财务报表与汇算报表区别
  • 给了钱不给发票可以报警吗
  • 小规模企业的企业所得税怎么交
  • 雇主责任险发票的项目名称怎么写
  • 营改增工程计价规则
  • 发票管理政策
  • 待摊费用在资产负债表中怎么填
  • win11怎么回到10
  • 企业缴纳社保包含哪些内容
  • 建筑企业自持商是指
  • 电脑到u盘
  • win7有线连接怎么设置
  • shpc32.exe - shpc32是什么进程 有什么用
  • 经营出租设备属于什么科目
  • 半成品月末账务处理
  • 增值税专票跨月但未认证,怎么作废
  • apache是什么文件
  • 代扣代缴个人所得税手续费返还 增值税
  • 挂靠借用资质账务处理?
  • 运费抵扣的基本原则
  • 固定资产折旧计算方法公式大全
  • 学摄影要交学费吗
  • php 解析
  • tcp/ip协议含义
  • 金蝶软件可以自学吗
  • 使用的拼音
  • vuerouter模块化
  • php array_fill
  • 单位购买电水壶会计入账
  • 出口信用保险补贴是否不征税收入
  • 收到招标文件怎么回函
  • 过路费抵扣进项税怎么计算
  • mysql常见报错
  • 专票作废扣税吗
  • 固定业户应当向其机构
  • 公司无流水要交税不
  • 总分类账与明细分类账平行登记的要点包括
  • 商业劳务费是什么意思
  • 预付账款余额在贷方为
  • 发票分割单使用范围
  • 投资收益主要包括哪些
  • 非本公司员工能否享受本公司的福利
  • 汇算清缴从业人数平均值怎么算
  • c#如何使用数据库
  • mysql5.7解压版安装
  • win7怎么清除记录
  • [置顶]电影名字《收件人不详》
  • scumpve服务器
  • nodejs模拟点击
  • js中使用组件
  • 安卓icon图标
  • python appium 微信
  • react-router react-router-dom
  • Node.js中的全局对象有
  • jquery插件是干什么的
  • html应用css
  • substrate框架原理
  • python flask框架 web服务器
  • python查找列表中的元素
  • python中的get方法
  • 北京东城区社保电话
  • 车船税完税证明开具如何开具
  • 税务局残保金征收工作汇报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设