Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >nest.js项目集成websocket服务

nest.js项目集成websocket服务

原创
作者头像
挥刀北上
修改于 2021-12-06 03:19:04
修改于 2021-12-06 03:19:04
6.2K00
代码可运行
举报
文章被收录于专栏:Node.js开发Node.js开发
运行总次数:0
代码可运行

nest.js项目集成websocket服务的话,需要安装相关的npm包,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i --save @nestjs/websockets @nestjs/platform-socket.io

一个是@nestjs/websockets,一个是@nestjs/platform-socket.io。

在nestjs项目中,我们将websocket服务集成为一个模块,这个模块中集成的服务便是配置websocket的文件,websocket这个类必须用@WebSocketGateway装饰器修饰,本质也是一个服务,即配置在providers中的类。

websocket的服务类一般会有一个成员属性和N个方法,成员属性其实就是websocket服务器的实例,而方法都是订阅特定事件的方法,成员对象用@WebSocketServer装饰器修饰,而方法都会用@SubscribeMessage装饰器来装饰。示例代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import {
  MessageBody,
  SubscribeMessage,
  WebSocketGateway,
  WebSocketServer,
  WsResponse,
} from '@nestjs/websockets';
import { from, Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import { Server } from 'socket.io';

@WebSocketGateway(8080,{
  cors: {
    origin: '*',
  },
})
export class EventsGateway {
  @WebSocketServer()
  server: Server;

  @SubscribeMessage('events')
  // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
  findAll(@MessageBody() data: any): Observable<WsResponse<number>> {
    console.log('我执行了两次');
    console.log('接收消息events的数据',data)
    return from([1, 2, 3]).pipe(map(item => ({ event: 'events', data: item })));
  }

  @SubscribeMessage('identity')
  async identity(@MessageBody() data: number): Promise<number> {
    console.log('接收identity的数据', data)
    // await new Promise((reslove,reject)=>{
    //   setTimeout(reslove,2000)
    // })
    return 1;
  }
  PublicMessage(message:string) :void{
    setInterval(() => {
      this.server.emit("exception",`我是服务端发来的消息${message}`)
    }, 1000)
  }
}

注意@WebSocketGateway修饰器一般需要传递两个参数,第一个参数为websocket服务器监听的端口,第二个参数为设置cors响应头,这样浏览器就不会组织跨越了。

这里有个技巧,如果第一个参数设置的和http服务器相同,启动时会报错,显示端口被占用,如果不设置第一个参数,那么默认的端口和http服务器端口相同,但是不会报端口被占用的错误。

WebSocketServer这个装饰器的作用是使Nest框架自动将服务器实例分配给指定属性。上文将服务器实例分配给了server。

SubscribeMessage装饰器必须传递一个参数,这个参数就是订阅的事件名称,客户端向这个事件发送消息,服务器这里就能订阅到了。

我看看一下websocket文件模块结构:

只需要一个网关(在nestjs项目中将websocket称为网关)文件和一个module文件,网关文件内容就是上面代码。

我们要将websocket这个模块配置成共享模块,只需要在module文件中做如下配置:

只需要在exports中导出服务本身,这样的话,如果其他模块要使用websocket这个模块中的服务的话,只需要在其他模块中导入websocket模块即可,假如我们要在posts模块中使用websocket模块,只需要如下配置:

之后在需要使用websocket模块的服务的地方将其依赖导入即可,其他模块使用websocket模块,本质上使用的事websocket模块的方法,假如在posts的控制器中我们需要使用websocket的服务,只需将其以来导入即可,代码如下:

有些同学要问为什么这么麻烦,直接将服务依赖注入到使用的地方不可以吗,答案显示是不可以,配置共享模块视为了在所有模块中共享websocket模块的实例,如果省略这一步,websocket实例就会多次被实例化,而配置了共享模块,在使用前先导入模块,到依赖注入服务,websocket模块就不会多次实力化了。说到底这事一个规则。

文章思维导图:

以上便是在nestjs项目中集成websocket的方法,希望对你有所帮助。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
dede怎么取消后台验证码,DEDE取消后台验证码
DEDEv5.5/v5.6怎么取消后台验证码,DEDE取消后台验证码 有些时候,使用DEDECMS的时候,在后台登陆处遇到后台验证码错误,或者嫌弃后台验证码麻烦,我们就可以将后台的验证码取消掉.这篇文章是介绍教你如果取消 DEDECMSv5.5后台验证码的步骤: 找到DEDE后台目录,也就是默认的 /dede/login.php 在Dreamweaver8里面是第44行 找到以下代码
用户1088318
2025/05/21
440
【DEDE后台】织梦网站后台登录页面删除cms广告
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴实操中笔记记录,保存使用非常方便:
攻城狮与产品喵
2025/03/13
3160
【DEDE后台】织梦网站后台登录页面删除cms广告
通过DedeCMS学习php代码审计
织梦(DedeCms)也是一个国产内容管理系统,曾经爆出过众多漏洞,甚至还有人开发了dedecms漏洞一键扫描器
FB客服
2021/08/24
22.2K0
搭建dedecms漏洞靶场练习环境
本文将对dedecms(织梦cms)所存在的漏洞进行分析和复现,因为代码审计较弱,代码这一块的分析借鉴了一些大佬们的思想,在这里对大佬们表示衷心的感谢。
HACK学习
2021/06/24
12.5K1
搭建dedecms漏洞靶场练习环境
DEDECMS织梦修改include和plus重命名防漏洞防篡改防挂马
织梦dedecms是站长使用得比较多的一个建站开源程序,正因如此,也是被被入侵挂马比较多的程序。下面就来跟大家说一下怎么重新命名dedecms的include文件夹以及plus文件夹来提高网站的安全性,减少被黑客软件扫描到漏洞的概率。 dedecms的漏洞主要集中在data、include、plus、dede、member几个文件夹中的php文件里,对于data这个文件夹我们可以把它移到网站的根目录外,dede可以冲命名,member可以删掉,一般用不着,special专题功能 install安装程序(必
米米素材网
2022/07/21
3.1K0
DEDECMS织梦修改include和plus重命名防漏洞防篡改防挂马
【DEDE会员】dedecms禁用了游客评论怎么设置?织梦5.7怎么能让游客评论dede不登陆评论文章方法
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴实操中笔记记录,保存使用非常方便:
攻城狮与产品喵
2025/03/13
1400
【DEDE会员】dedecms禁用了游客评论怎么设置?织梦5.7怎么能让游客评论dede不登陆评论文章方法
DedeCMS的两个小trick
0x00 前言 昨天晚上做了一个神奇的梦,梦到了我高中时候晚自习在偷偷的看《黑客攻防技术宝典》,当年的事情无论是苦是乐,回忆起来总是感觉非常的美好。但是,现实就是现实,梦境还是要被舍友的闹铃声打破,在大梦初醒后,我仿佛有一种“垂死梦中惊坐起”的感觉,是谁为我织出了这么美好的一个梦境?难道织梦CMS(DedeCMS)又要出0day了?于是,我立马从床上跳了下来,打开电脑,从官网下载了最新版的织梦CMS(DedeCMS V5.7 SP2正式版),心想着一定要代码审计一波带走。于是乎,就有了你现在正在阅读的这篇文
ChaMd5安全团队
2018/04/16
1.3K0
DedeCMS的两个小trick
DEDECMS仿站常用模板标签记录 DEDECMS主题模板必备
DEDECMS织梦CMS程序如今官方也不在更新,但是还是有很多人使用。这款内容管理系统的CMS程序曾经确实是非常的火热,基本上企业网站、内容类的网站都会使用这款程序,在于这款程序的结构非常的简单。但是也有一些缺点,比如经常有漏洞,但是如果取消交互功能还是比较安全的。
老蒋
2021/12/27
27.5K0
dedecms数据库内容替换安全确认码不显示怎么解决
  ytkah今天在网站迁移服务器时发现,dedecms数据库内容替换安全确认码无法显示,这个安全码的位置是在核心 - 批量维护 - 数据库内容替换,有个安全码填写,这里教你怎么直接忽略这个验证码。打开dede/sys_data_replace.php,找到以下代码(大约在45行),删除或者注释掉,这个时候我们再次进行数据库内容替换时就无需输入安全确认码了。 // if($validate == "" || $validate != $svali) // { // ShowMsg("安全确认码
ytkah
2018/03/06
2.5K0
dedecms无法登录提示本页面禁止返回
  ytkah最近用dedecms做会员系统,在做登录页面的时候发现登陆的时候提示本页面禁止返回,把登陆模板换回官方原来的,竟然可以登陆,那么应该是模板出错了,又看了index_do.php这个文件,这个就是登陆的处理文件,$fmdo $dopost这两个变量 为空的话,系统就会啥都不做,提示本页面禁止返回。最根本的原因就是,在模板登陆表单里面没有加上 <input type="hidden" name="fmdo" value="login"> <input type="hidden" name="dop
ytkah
2018/03/06
6K0
dedecms无法登录提示本页面禁止返回
重置dedecms管理员后台密码重现及分析
0×00 概述 2018年1月,网上爆出dedecms v5.7 sp2的前台任意用户密码重置和前台任意用户登录漏洞,加上一个管理员前台可修改其后台密码的安全问题,形成漏洞利用链,这招组合拳可以重置管理员后台密码。 先来看看整体利用流程:    重置admin前台密码—>用admin登录前台—>重置admin前后台密码 0×01 前台任意用户密码重置分析 组合拳第一式:重置管理员前台密码 漏洞文件:member\resetpassword.php:75 else if(
奶糖味的代言
2018/04/16
6.9K0
重置dedecms管理员后台密码重现及分析
总结一些防止dedecms系统被攻击的方法
总结一些防止dedecms系统被攻击设置的方法,可有效的防止织梦系统被挂马,仅供各位站长参考。 1.安装时数据库的前缀不用dedecms默认的前缀dede_,可以改成其他的名称如diy_ 2.装好dede织梦cms系统后删除装文件install 3.修改织梦后台文件目录:把默认的dede改成其他名字 4.织梦后台后台密码尽量复杂化:密码应该由大写字母、小写字母和数字组成 5.将系统的data目录迁移到根目录以外:data目录是系统缓存和配置文件的目录,一般都有可以读写的权限,只要是能够写入的目录都可能存在安
ytkah
2018/03/06
2.9K0
dedecms首页调用随机文章全自动时时更新
dedecms织梦系统是全站生成静态html的,这个对搜索引擎比较友好,但是有时我们要调用文章,让蜘蛛每次来访问都感觉像是有添加新内容一样,要如何做到呢?
ytkah
2022/03/14
7.4K0
几个有效方法去掉DedeCMS首页index.html后缀
我们有在使用织梦DedeCMS程序的时候是否有看到在打开网站首页的时候会有index.html这样子的后缀跟着。有些朋友可能忌讳这样的样式,有的会说对网站SEO有影响,实际上影响是不大的,只不过看着确实不是特别好看,如果我们有需要去掉的话也是可以的。
老蒋
2021/12/27
4K0
DEDECMS织梦文章列表标题重复显示解决方案
今天还原数据库后,浏览网页http://www.mimisucai.com/a/wangluobiancheng/list_7_2.html发现列表页标题有重复,先上图:
米米素材网
2022/07/16
4.8K0
DEDECMS织梦文章列表标题重复显示解决方案
dedecms模板文件讲解以及首页标签替换
关于dedecms模板文件,可以参考织梦系统文件夹功能简介或者是之前发布的dedecms的安装介绍.
米米素材网
2022/06/23
16.8K0
dedecms模板文件讲解以及首页标签替换
DedeCMS v5.8.1_beta未授权远程命令执行漏洞分析
深信服公众号前几天发了Dedecms未授权RCE的漏洞通告。地址是这个: 【漏洞通告】DedeCMS未授权远程命令执行漏洞
Deen_
2021/11/12
4.4K0
DedeCMS v5.8.1_beta未授权远程命令执行漏洞分析
织梦CMS安装后的安全优化设置,有效防护木马
织梦CMS在安装完成后,新人往往会直接开始开发使用,忽视了一些安全优化的操作,这样会导致后期整个系统安全系数降低,被黑或者被注入的概率极高,毕竟这世界百分百存在着极多的无聊hacker对全网的网站进行扫描,扫到你这个菜站,尤其是使用率极高的DEDECMS,对你的站点下手的欲望更高,所以在开发前做好安全防范还是很有必要的!
米米素材网
2022/07/15
2.9K0
织梦CMS安装后的安全优化设置,有效防护木马
【DEDE文章】dedecms出现DedeTag Engine Create File False的解决教程
DEDE织梦cms常用的参数标签汇总、以及操作过程中的一些bug问题解决方法,dede网站二开,以下龙腾飞网络科技-小吴在建站实操中笔记记录,织梦dede建站教程保存使用非常方便:
攻城狮与产品喵
2025/03/13
1560
【DEDE文章】dedecms出现DedeTag Engine Create File False的解决教程
杨校老师课堂之DeDeCMS建站_程序安装
织梦程序依托MySQL数据库、PHP开发环境、服务器(Apache或Nginx),初学期间安装这些环境对初学者是极其困难,因此,我们可以借助集成开发环境,也就是通过一个软件完成以上所有环境的配置。 基于Linux操作系统、PHP开发环境、MySQL数据库、Apache服务器的集成开发环境软件还是有很多的,DeDeCMS官方提供了DeDeApZ、还有Apmserver、PHPStudy等软件。
杨校
2021/06/01
3.9K0
杨校老师课堂之DeDeCMS建站_程序安装
推荐阅读
相关推荐
dede怎么取消后台验证码,DEDE取消后台验证码
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验