【Express.js】集成SocketIO

这篇具有很好参考价值的文章主要介绍了【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/文章来源地址https://www.toymoban.com/news/detail-642877.html

下一节-全面鉴权

到了这里,关于【Express.js】集成SocketIO的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Express.js】页面渲染

    常见的页面分为两种,一种是静态页面,比如用 Vue、React 等写好的静态页面,另一种是动态模板页面,如 Thymeleaf,JSP 等。 本节将简要介绍如何在 express 中渲染静态页面,以及适用于 express 的模板引擎 pug 。 写前端的和搞部署的同学应该都清除,页面渲染的用到的 css, js, f

    2024年02月13日
    浏览(47)
  • 【Express.js】请求类型

    本节将介绍常见的http请求方式,并站在后端的角度初步感受它们的不同点 GET 意图是 获取 ,不会对服务器上的数据产生影响,将要携带的数据放在 URL 上,通常不带请求体,带了也不一定兼容 POST 意图是 提交 ,通常用于修改和新增服务器上的数据,偏向 新增 ,路径定位较

    2024年02月09日
    浏览(43)
  • Express.js认识

         Express 是 Node.js 老框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。 市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。 Express 框架使用标准 Node.js 语法,主要由以下 3 个核心部分组成: 路由。 中间件。 错误处理。      Express  基本结

    2024年02月21日
    浏览(37)
  • 【Node.js】Express-Generator:快速生成Express应用程序的利器

    在Node.js世界中,Express是一个广泛使用的、强大的Web应用程序框架。它为开发者提供了一系列的工具和选项,使得创建高效且可扩展的Web应用程序变得轻而易举。然而,对于初学者来说,配置和初始化Express应用程序可能会有些困难。为了解决这个问题,Express团队推出了一款名

    2024年02月10日
    浏览(55)
  • 【Express.js】软件测试

    本节介绍如何在 express.js 使用 Jest 进行单元测试 准备一个基础的 express 项目,本文基于 evp-express-cli 安装 Jest 生成 Jest 配置 创建测试文件,以 .test.js 后缀命名,Jest 在运行期间会自动查找并执行符合 *.test.js 命名的文件,为规范起见,新建一个 test 目录,存放所有的测试文件

    2024年02月13日
    浏览(36)
  • 【Express.js】微服务架构

    微服务 微服务架构是将一个单体应用程序拆分为一个个独立且保持松耦合的服务的一种架构方式,每个服务有着独立的数据库并且能独立运行部署,所有的服务最终可以被视作一个集群而进行统一管理 优缺点 从微服务的理念着手,它的优缺点绝大部分能通过与单体应用相对

    2024年02月16日
    浏览(41)
  • 【Express.js】处理请求数据

    本节将具体介绍express后端处理请求源携带数据的一些方法和技巧 很多时候我们需要处理一些类似但有操作差别或不同对象的业务,我们可以监听一段基本路径,将其中某一个段或者某几段路径作为变量,在接口中根据不同的路径变量执行不同的业务操作,这是一种REST风格比

    2024年02月11日
    浏览(39)
  • 【Express.js】全局错误处理

    在前面几节里,我们处理异常的方法都是手动在可能引发异常的地方捕捉错误,这固然是必要的,可以有针对性得处理异常,但很多时候,有许多潜在的异常,有一句话叫永远不要相信输入的数据,你永远都不知道什么时候可能会以什么方式触发某些阴间异常从而造成系统崩

    2024年02月10日
    浏览(47)
  • 【Express.js】使用zod检验

    上一节我们介绍了 express-validator,本节我们介绍一个更通用的检验工具 Zod 写前端的同学可能知道Zod,我们在提交表单前需要对数据初步检查,Zod是一个很棒的工具。前端可以偷懒,但后端不能偷懒,Zod也可以用到我们的 express 后端中来,封装一个 Zod 中间件即可 用 evp-expre

    2024年02月13日
    浏览(33)
  • Express.js实现注册和登录

     注册接口 注册接口,用户提供必要的注册信息(如用户名和密码),服务器对用户进行验证并创建用户账号 登录接口 登录接口,用户提供登录凭据(如用户名和密码),服务器验证凭据的正确性并颁发访问令牌 校验接口  校验登录状态,服务器将校验请求中的登录凭据(

    2024年02月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包