当前位置: 首页 > news >正文

【Express.js】集成SocketIO

集成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.lryc.cn/news/117772.html

相关文章:

  • 为树莓派Pico配置交叉编译环境和工具链arm-none-eabi-gcc时可能会遇到的错误以及解决方案
  • Yum 部署K8S集群
  • 初阶C语言-操作符详解(下)
  • reposync命令——下载yum仓库中全部的包到本地
  • LC-杨辉三角
  • Golang空结构体struct{}的作用是什么?
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[示例选择器(Example Selectors)]
  • 【实战项目】c++实现基于reactor的高并发服务器
  • Docker部署ElasticSearch7
  • 【算法|数组】滑动窗口
  • 笙默考试管理系统-MyExamTest----codemirror(2)
  • 一次面试下来Android Framework 层的源码就问了4轮
  • 知网期刊《中阿科技论坛》简介及投稿须知
  • kafka是有序的吗?如何保证有序?
  • centos 定时脚本检测tomcat是否启动,未启动情况下重新启动
  • 【Unity3D】消融特效
  • 10.Eclipse配置Tomcat详细教程、如何使用Eclipse+tomcat创建并运行web项目
  • MySQL索引1——索引基本概念与索引结构(B树、R树、Hash等)
  • 2023-08-06力扣今日四题
  • Kubernetes入门 三、命令行工具 kubectl
  • 18 | 基于DDD的微服务设计实例
  • router和route的区别
  • 每日后端面试5题 第五天
  • BGP基础实验
  • 在excel中整理sql语句
  • Vue中下载不同文件的几种方式
  • Ethernet/ip协议开发记录
  • Spring系列三:基于注解配置bean
  • git的简单介绍和使用
  • uni-app运行微信开发工具小程序,出现× initialize报错