位置: 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的区别(前端经典面试题讲解)

  • vivox70怎么设置双击锁屏(vivox70怎么设置动态壁纸)

    vivox70怎么设置双击锁屏(vivox70怎么设置动态壁纸)

  • 美团历史订单如何申请开票(美团历史订单如何申请退款)

    美团历史订单如何申请开票(美团历史订单如何申请退款)

  • 快手如何隐藏共同好友(快手如何隐藏共创作品)

    快手如何隐藏共同好友(快手如何隐藏共创作品)

  • 惠普1005和m1005的区别(惠普m1005和1005w)

    惠普1005和m1005的区别(惠普m1005和1005w)

  • 手机怎样滴滴打车(手机上怎样打滴)

    手机怎样滴滴打车(手机上怎样打滴)

  • v1816t是什么手机

    v1816t是什么手机

  • 抖音几十个播放量是怎么回事(抖音几十个播放量是不是废了)

    抖音几十个播放量是怎么回事(抖音几十个播放量是不是废了)

  • 手机可以解压zip文件吗(手机可以解压压缩文件吗)

    手机可以解压zip文件吗(手机可以解压压缩文件吗)

  • locallow文件夹可以删除吗(local文件夹可以移动吗)

    locallow文件夹可以删除吗(local文件夹可以移动吗)

  • 手机号码没注销会一直扣费吗(手机号码没注销好几年了会扣费吗)

    手机号码没注销会一直扣费吗(手机号码没注销好几年了会扣费吗)

  • 微信是什么(微信是什么软件)

    微信是什么(微信是什么软件)

  • 手机sd卡是什么意思(vivo手机内存卡怎么使用)

    手机sd卡是什么意思(vivo手机内存卡怎么使用)

  • 照片里的字怎么变成文字(照片里的字怎么反过来)

    照片里的字怎么变成文字(照片里的字怎么反过来)

  • 苹果电话声音太小怎么解决(苹果电话声音太大别人可以听见)

    苹果电话声音太小怎么解决(苹果电话声音太大别人可以听见)

  • 手机版wps怎么查找关键字(手机版wps怎么查找重复项)

    手机版wps怎么查找关键字(手机版wps怎么查找重复项)

  • 安装驱动是什么意思(安装驱动是干嘛的)

    安装驱动是什么意思(安装驱动是干嘛的)

  • 手机wifi已连接但有感叹号不能上网(手机wifi已连接,不可上网)

    手机wifi已连接但有感叹号不能上网(手机wifi已连接,不可上网)

  • 华为手机怎么安装两个微信(华为手机怎么安装电话卡)

    华为手机怎么安装两个微信(华为手机怎么安装电话卡)

  • iphone照片导出到电脑(iphone照片导出到华为手机)

    iphone照片导出到电脑(iphone照片导出到华为手机)

  • 天猫精灵带录音功能吗(天猫精灵带录音功能么)

    天猫精灵带录音功能吗(天猫精灵带录音功能么)

  • oppo手机分享热点怎么用(oppo手机分享热点怎么操作)

    oppo手机分享热点怎么用(oppo手机分享热点怎么操作)

  • 快手怎么点亮小红心(快手怎么点亮小心心)

    快手怎么点亮小红心(快手怎么点亮小心心)

  • u盾怎么和手机连接(u盾怎么和手机连接的图示)

    u盾怎么和手机连接(u盾怎么和手机连接的图示)

  • 显示器花屏横线条闪烁(显示器花屏横线条闪烁维修)

    显示器花屏横线条闪烁(显示器花屏横线条闪烁维修)

  • 境外向国内汇款几天到账
  • 补交印花税怎么做账
  • 汇算清缴时纳税调整表调增金额是怎么算出来的
  • 什么是宏观税负如何判定一国宏观税负的轻重
  • 专用发票只能公对公吗
  • 处置固定资产增值税税率
  • 增值税发票抵扣勾选平台
  • 企业会计准则利润表本期金额
  • 坏账准备递延所得税资产怎么算
  • 年初数和年末数审计报告不一致
  • 公司转让住房是什么意思
  • 现金存入银行会计摘要怎么写
  • 二手车销售挣钱不
  • 土地出让金抵减销项税如何申报
  • 装饰设计费计入什么科目
  • 以前年度漏记一笔短期借款但本金利息支出记账了
  • 技术转让所得减去成本吗
  • 双倍余额折旧法
  • 上月开的红字发票本月可以作废吗
  • 现金存入对公账户用途写什么
  • 房地产土地增值税加计扣除20%
  • 去年的发票今年能红字冲销吗
  • 公司注销时债权债务怎么处理
  • 办公室电话费
  • 其他应付款转增股本
  • 账面价值,账面净值,账面余额
  • 购入固定资产预算会计怎么做账务处理
  • 如何设置bios开关机
  • 通用pe工具箱安装教程
  • linux系统中安装软件的批处理文件
  • vue 高德地图 窗体
  • repair.exe是什么软件
  • php生成随机字符串源,且不会重复出现
  • PHP:zip_entry_filesize()的用法_Zip函数
  • php 正则函数
  • 会计怎么区别法定维修义务和合同义务
  • 收取职工交来伙食费如何入账
  • 分公司?
  • php抢红包功能思路
  • 中小企业内部分析
  • 所得税需要结转么
  • phpcms怎么样
  • 材料采购与原材料账户核算内容有何差别
  • 开立一般户需要法人到场吗
  • 没有收入该怎么办
  • 普通发票有什么
  • 政府补助如何确定收入
  • 什么叫金税四期呢?
  • 软件研发费用怎么做账
  • 财务人员如何爱岗敬业
  • 未收到货款发票是什么意思
  • 没开发票能确认没开发票能确认收入申报纳税吗?
  • 小规模纳税人已付款对方不开发票几年了会计分录
  • 抵账的车买了什么后果
  • 景观石属于采购哪个品目
  • 仓库管理人员工资属于什么费用
  • 什么费用可以列入研发费用
  • 房地产预交税金怎么算
  • 少做收入第二年怎么算
  • 综合所得的个人所得税有哪些筹划技巧
  • 开票方与付款方不一致问题
  • 哪些发票可以抵减
  • 累计摊销可以做什么分录
  • 出纳账户怎么设置
  • mysql的优化有哪几种
  • win7笔记本电脑怎么重装系统教程
  • 今后64位Win10 Mobile将是未来重点
  • linux 磁盘情况
  • 怎么设置永久禁止下载拼多多
  • nodejs示例
  • Android Error: No resource found ··· 'layout_above' with value '@id/···
  • node.js中的http.createClient方法使用说明
  • 如何让批处理文件运行不显示
  • 使用nodejs开发后端
  • unity读取fbx文件
  • python批量创建文件
  • jquery.ztree中文api
  • python字符类型有哪些
  • 税务局有哪些职务名称
  • 重庆市非住宅交易税费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设