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

  • 双十一天猫规定的发货时间(双十一天猫有什么优惠活动)

    双十一天猫规定的发货时间(双十一天猫有什么优惠活动)

  • 新手机出现补丁日期正常吗(新手机出现补丁好吧)

    新手机出现补丁日期正常吗(新手机出现补丁好吧)

  • 京东怎么发起退款申请(京东怎么发起退货退款申请)

    京东怎么发起退款申请(京东怎么发起退货退款申请)

  • osi和tcpip的区别和联系(osi与tcpip协议的联系和区别)

    osi和tcpip的区别和联系(osi与tcpip协议的联系和区别)

  • 路由器上绑电池能提高网速吗(路由器上绑电池有用吗)

    路由器上绑电池能提高网速吗(路由器上绑电池有用吗)

  • 荣耀30和p30区别(华为荣耀30和p30哪个性价比高)

    荣耀30和p30区别(华为荣耀30和p30哪个性价比高)

  • 指令寄存器的作用(指令寄存器里装的是什么)

    指令寄存器的作用(指令寄存器里装的是什么)

  • 索尼8500g和8588g区别(索尼8500G和8500D的区别)

    索尼8500g和8588g区别(索尼8500G和8500D的区别)

  • 公众号被多少人举报才会处理(公众号多少人关注算多)

    公众号被多少人举报才会处理(公众号多少人关注算多)

  • 苹果麦克风权限不显示(苹果麦克风权限未开启怎么设置)

    苹果麦克风权限不显示(苹果麦克风权限未开启怎么设置)

  • 苹果XR手机突然黑屏了怎么办(苹果xr手机突然黑屏)

    苹果XR手机突然黑屏了怎么办(苹果xr手机突然黑屏)

  • iphone11闪光灯上面的小孔(苹果11闪光灯上面)

    iphone11闪光灯上面的小孔(苹果11闪光灯上面)

  • windows中的窗口类型有几种(windows中的窗口主要由什么组成)

    windows中的窗口类型有几种(windows中的窗口主要由什么组成)

  • 为什么在word里打字后面的字就没(为什么在word里插图片不能移动)

    为什么在word里打字后面的字就没(为什么在word里插图片不能移动)

  • win10怎么查无线密码(win10怎么查无线网卡)

    win10怎么查无线密码(win10怎么查无线网卡)

  • 手机怎么往mp3里传歌(手机怎么往mp3里传歌曲)

    手机怎么往mp3里传歌(手机怎么往mp3里传歌曲)

  • 拼多多怎么看消费总额(拼多多怎么看消费总账单)

    拼多多怎么看消费总额(拼多多怎么看消费总账单)

  • excel画线工具在哪(excel表格中划线工具)

    excel画线工具在哪(excel表格中划线工具)

  • 苹果xsmax保修期多久(苹果xsmax保修期内屏幕碎了)

    苹果xsmax保修期多久(苹果xsmax保修期内屏幕碎了)

  • p30和p20的区别(p30和p20有什么区别)

    p30和p20的区别(p30和p20有什么区别)

  • 文件传输助手消息恢复(文件传输助手消息发不出去)

    文件传输助手消息恢复(文件传输助手消息发不出去)

  • cad快速选择快捷键(cad快速选择快捷键qse)

    cad快速选择快捷键(cad快速选择快捷键qse)

  • 下载东西慢怎么办(下载慢咋办)

    下载东西慢怎么办(下载慢咋办)

  • 使用Vue来完成项目中的首页导航+左侧菜单(vue项目使用)

    使用Vue来完成项目中的首页导航+左侧菜单(vue项目使用)

  • 刷题日常计~JS①(刷题是啥意思啊)

    刷题日常计~JS①(刷题是啥意思啊)

  • 车险车船税会计分录
  • 企业所得税如何申报操作
  • 未分配利润分配顺序
  • 收不回来的装修钱怎么办
  • 办公用品普通发票的会计分录
  • 去年的成本如何调整汇算清缴额
  • 发票章坏了能自己刻吗
  • 黑色金属冶炼压延品税收编码
  • 申报从租计征的房产税必须提前备案吗
  • 个体户定期定额是什么意思
  • 发生哪些情形的应判定为重大电力安全隐患
  • 进口转卖业务
  • 员工借款可以直接转账吗
  • 预付水电费后应怎么做账
  • 人工费用占销售收入比重
  • 2017年广告费税率
  • 小微企业免征增值税条件
  • 教育咨询发票怎么开具
  • 应交税费借方余额怎么处理
  • 什么情况增值税专用发票不能抵扣
  • 发票经手人和经办人的区别
  • 装修工程需要预缴吗
  • 外贸过程中的银行是什么
  • 旅行社代订的住宿费可以抵扣吗
  • bios详细解释及作用
  • 进程lsass.exe
  • php实现上传文件
  • 粒子效果大全
  • 建筑劳务费发票有进项抵扣吗
  • react函数组件useeffect
  • 小规模纳税人的企业所得税怎么算
  • 办理组织机构代码证需要什么材料
  • 教你学python
  • yolov3输出是什么
  • vue脚手架配合springsecurity
  • 命令行find
  • 专利收费的职能包括
  • 不确认收款退款对方还能收到钱么?
  • 超市电子发票怎么开
  • 合并报表为什么要抵消子公司所有者权益
  • 公司买的微波炉算职工福利费吗
  • 银行对账单可以作为原始凭证入账吗
  • mysql 大量数据
  • 营业收入净额是销售收入净额吗
  • 股权质押和股权抵押有什么区别
  • 贴现利息收入的账务处理
  • 一般纳税人只开普票不开专票免税
  • 合并报表时抵消内部交易包含的未实现损益的影响包括
  • 出口退税 账务处理
  • 购买原材料时发生的不可抵扣的增值税额
  • 网上报税零申报流程演示2018
  • 税务稽查补缴增值税税的账务处理流程
  • 什么情形不属于共同犯罪
  • 关于注册资本的最新规定
  • 领购发票的方式有哪些
  • win7总是更新怎么办
  • 怎么防止win10
  • iis7配置asp
  • win8ui
  • linux中apt-get和yum
  • linux 下VSFTP 530 Permission denied错误的解决方法
  • linux 操作系统
  • spyware.exe - spyware是什么进程
  • win8系统怎么设置开机密码
  • Linux dpkg-query 命令用法详解(Debian Linux中软件包的查询工具)
  • Node.js中的全局变量有哪些
  • 安卓关键词覆盖
  • shell脚本中获取参数
  • unity人物面板
  • java的file类的常用操作
  • python数学语言
  • javascript基础类型
  • Android alertDialog 动态添加edittext无法弹出键盘解决方案
  • 房租计入待摊费用
  • 二手车公司如何运营
  • 所得税汇总纳税分配表
  • 2023河南新农合截止日期新规
  • 西藏五个确保是什么?
  • 日本海淘推荐
  • 计提缴纳城建税分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设