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

  • 越狱的朱贤健(越狱的好处)(越狱监狱原型)

    越狱的朱贤健(越狱的好处)(越狱监狱原型)

  • 华为手环时间不对了不同步怎么调(华为手环怎么调整时间)

    华为手环时间不对了不同步怎么调(华为手环怎么调整时间)

  • 华为mate40pro像素是多少(华为mate40pro像素和苹果哪个好)

    华为mate40pro像素是多少(华为mate40pro像素和苹果哪个好)

  • 微信获取位置信息失败是怎么回事(微信获取位置信息失败怎么解决)

    微信获取位置信息失败是怎么回事(微信获取位置信息失败怎么解决)

  • 什么是展示机(什么是展示机?)

    什么是展示机(什么是展示机?)

  • 三星s10重启了怎么一直在启动(三星s10重启了怎么关机)

    三星s10重启了怎么一直在启动(三星s10重启了怎么关机)

  • 组装一台计算机需要什么(组装一台计算机需要哪些硬件设备)

    组装一台计算机需要什么(组装一台计算机需要哪些硬件设备)

  • 按照电子元件划分计算机经历了几代(电子元件bz)

    按照电子元件划分计算机经历了几代(电子元件bz)

  • 电脑需要一直连接电源吗(电脑需要一直连接电源,否则容易卡机)

    电脑需要一直连接电源吗(电脑需要一直连接电源,否则容易卡机)

  • opporeno充电不显示闪充(oppo reno充电不显示vooc)

    opporeno充电不显示闪充(oppo reno充电不显示vooc)

  • 5g独立组网和非独立组网的区别(5g独立组网和非组网区别)

    5g独立组网和非独立组网的区别(5g独立组网和非组网区别)

  • 抖音怎么给别人点赞(抖音怎么给别人发红包)

    抖音怎么给别人点赞(抖音怎么给别人发红包)

  • 惠普打印机信息页没有二维码(惠普打印机信息表打不出来)

    惠普打印机信息页没有二维码(惠普打印机信息表打不出来)

  • 华为手机首页的时间没有了怎么办(华为手机首页的天气预报怎么弄回来)

    华为手机首页的时间没有了怎么办(华为手机首页的天气预报怎么弄回来)

  • 苹果11怎么静音(苹果11怎么静音了设置都正常 怎么就是没声音)

    苹果11怎么静音(苹果11怎么静音了设置都正常 怎么就是没声音)

  • 红米k30是多少hz(红米k30是多少毫安的电池)

    红米k30是多少hz(红米k30是多少毫安的电池)

  • 多媒体信息包括文字吗(多媒体信息包括())

    多媒体信息包括文字吗(多媒体信息包括())

  • 微博删粉丝对方知道吗(微博删除粉丝会被发现吗)

    微博删粉丝对方知道吗(微博删除粉丝会被发现吗)

  • 手机qq怎么透明头像(手机qq怎么透明名片背景)

    手机qq怎么透明头像(手机qq怎么透明名片背景)

  • 魅族16sPro怎么分享热点(魅族16thplus怎么分屏)

    魅族16sPro怎么分享热点(魅族16thplus怎么分屏)

  • iphone如何截长图(iPhone如何截长图)

    iphone如何截长图(iPhone如何截长图)

  • 天猫赔付的积分有什么用(天猫赔付积分什么时候开始不能抵现了)

    天猫赔付的积分有什么用(天猫赔付积分什么时候开始不能抵现了)

  • 桌面级 CPU 天梯图(桌面级cpu天梯图快科技)

    桌面级 CPU 天梯图(桌面级cpu天梯图快科技)

  • 融资利息进项税如何抵扣
  • 分公司开专票需要缴税
  • 不是党员证明哪些情况需要开
  • 财务如何审核合同支付条款风险
  • 公司往来借款在现金流量表哪里填写
  • 企业资金运动包括哪几个环节
  • 属于劳务分包合同
  • 应扣未扣的个人所得税税收如何处理
  • 装修工程分期开票分期付款如何作账?
  • 车间停产期间设施有哪些
  • 广告制作费有哪些项目
  • 现金支付和个人自费
  • 手撕票验旧是什么意思
  • 教育附加费和地方教育附加费的计算
  • 携税宝如何网上缴费
  • 注册资本越大越有实力
  • 个体工商户经营所得税怎么申报
  • 积分现金兑换比例怎样计算
  • 计提福利费会计科目
  • php 语法
  • 分红率与股息率有啥区别
  • 单位人工成本计算公式
  • 股息分配方式
  • 办公楼装修费两万合理吗
  • uniapp编译原理
  • 建筑行业总分包怎么算
  • vue ref获取元素高度
  • 怎么把html转成图片
  • rm -rf/指令指删除什么
  • 企业销售固定资产房屋都要交什么税
  • 股票收入需要交税
  • phpcms建站教程
  • 个体工商户开普通发票需要交税吗
  • 个税app重置申报
  • 扶贫资金入股问题
  • mysql日志文件在哪里
  • 终止劳动合同赔偿N+1
  • 小规模季度免税政策
  • 出租车发票可以改时间吗
  • 用友t3系统功能怎么用
  • 民办非企业收到政府拨款分录
  • 所得税汇算清缴调整后要账务处理吗
  • 研发部门的房租可以资本化
  • 年终奖政策,提成怎么算
  • 固定资产当月入账当月计提吗
  • 直接减免增值税的情形
  • 收到工会经费如何处理
  • 中标费用入什么科目
  • 收到银行存款利息
  • 股东之间股权转让的税务处理
  • 以前年度损益科目类别怎么填
  • 其他权益工具投资公允价值变动计入什么科目
  • 费用报销的凭证是什么
  • 预算会计年末如何结账
  • 退票费收入按什么征税
  • 应收账款是净额列示吗
  • 结账前要做哪些准备工作
  • UBUNTU怎么安装MPEG-4解码器
  • mac应用商店未能完成购买
  • 安装ubuntu不支持nvidia显卡
  • shell 子函数
  • muamgr.exe - muamgr是什么进程 有何作用
  • linux free 命令
  • linux getuid
  • win7筛选键
  • msoobe命令
  • js 图片加载
  • nodejs使用express
  • 常用的批处理命令
  • unityui插件
  • 陌陌2021年最近事件
  • dom基础知识
  • Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
  • jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
  • 消费税抵扣范围包括哪些
  • 汽车维修增值税专用发票
  • 国家税务局扬州
  • 张宁年轻
  • 2021年留抵退税可以退2019年的吗
  • 武汉税务地区编号
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设