【Express.js】集成SocketIO

news/2024/11/17 18:26:14/

集成SocketIO

本节我们介绍在如何在 express 中集成 Socket.IO

Socket.IO 算是 WebSocket 的一个超集,进行了一些封装和拓展。

准备工作

  • 创建一个 express.js 项目(本文基于evp-express-cli)
  • 安装socket.io.js:
npm i socket.io

创建代理

正常的项目都是分层的,为了避免循环依赖,本文采用代理类构造单例的方式来创建websocket服务器。

wsProxy.js:
在构造器内创建socket.io服务器,并监听个别事件,最后把服务器赋给server成员变量。再定义一个静态的获取实例方法,调用时实例若为空,就构建实例:

const { Server } = require('socket.io');
const server = require('./server');
const logger = require('./logger');class SocketIoProxy {/*** @type {Server}*/_instance = null;constructor() {this.server = new Server(server);logger.info('SocketIo server created!');this.server.on('connection', (socket) => {socket.on('message', (data) => {logger.info(`client: ${JSON.stringify(data)}`);socket.emit('message', data);});});}static instance(){if(!this._instance){this._instance = new SocketIoProxy();}return this._instance;}
}async function init() {return SocketIoProxy.instance();
}module.exports = {init,instance: SocketIoProxy.instance()
}

最后把服务器导出来:

async function init() {return RedisProxy.instance();
}module.exports = {init,instance: RedisProxy.instance(),
};

然后在任意其它地方调用 socketioProxy.instance 即可获取单例,在从单例中获取server即可主动操作socketio.

const SocketioProxy = require('../utils/socketioProxy');
const socketioProxy = SocketioProxy.instance;
const socketioServer = socketioProxy.server;

你可以自己手动配置一遍,也可以使用evp-express-cli作为手脚架创建项目并选择socketio模板。

关于 socket.io 的详细用法请见官方文档: https://socket.io/zh-CN/

下一节-全面鉴权


http://www.ppmy.cn/news/1018065.html

相关文章

SHRM这个证书,对人力资源有什么用处?

从2018年开始,人力资源专业人士可以追求无数的证书。然而,我们还没有看到任何研究或硬数据来帮助人力资源专业人士确定哪些特定的人力资源证书值得追求。例如,人们可以期望从每项认证中获得哪些特定技能和能力?哪一个会给人力资源…

前端实习周记第三周周记

第二周总结 第二周主要是做了一些PC端细节内容。大的地方改的不多,但是小的细节蛮多。 值得一提的是,第二周做的微信小程序,改了很多逻辑。改逻辑需要与后端进行联调,收获很大,思路也愈发清楚。 记录做了什么是好习…

java 知识点

基本语法: 变量和数据类型控制流语句(if、else、switch)循环语句(for、while、do-while)面向对象编程(OOP): 类和对象 封装、继承和多态性构造方法和析构方法抽象类和接口 异常处…

C#学习记录-线程

线程 定义:Thread t new Thread(Test); //可以用匿名 lamda 调用:t.Start("ljc6666");方法可以无参或一个参数,如果要传入多个参数,可以传入一个结构体 namespace _17_线程Thread {internal class Program{stati…

智能财务分析的无冕之王-奥威BI数据可视化工具

利用智能数据可视化分析工具,可极大提升财务分析效率和报表可读性,缩短从分析到决策的耗时。但财务分析的难度往往比其他分析更高,因为它的分析指标计算组合变化太多也太快。哪些数据可视化工具能胜任智能财务数据分析? 奥威BI数…

探索 TypeScript 元组的用例

元组扩展了数组数据类型的功能。使用元组,我们可以轻松构造特殊类型的数组,其中元素相对于索引或位置是固定类型的。由于 TypeScript 的性质,这些元素类型在初始化时是已知的。使用元组,我们可以定义可以存储在数组中每个位置的数…

【自然语言处理】大模型高效微调:PEFT 使用案例

文章目录 一、PEFT介绍二、PEFT 使用2.1 PeftConfig2.2 PeftModel2.3 保存和加载模型 三、PEFT支持任务3.1 Models support matrix3.1.1 Causal Language Modeling3.1.2 Conditional Generation3.1.3 Sequence Classification3.1.4 Token Classification3.1.5 Text-to-Image Ge…

伦敦金费用有哪几方面?

通常在网上开设伦敦金投资账户是没有成本的,而它交易的费用,主要是由点差和过夜利息(仓息)构成。如果伦敦金投资者只是做短线的日内交易,做一手完整的100盎司的标准合约,需要支付大约50美元点差费用&#x…