Nest.js WebSocket
Docs: https://docs.nestjs.com/websockets/gateways
λ yarn add @nestjs/websockets
λ nest g ga events
events.gateway.js
import { SubscribeMessage, WebSocketGateway, WsResponse, WebSocketServer } from '@nestjs/websockets';
import { Observable, of } from 'rxjs';
import { map } from 'rxjs/operators'
const l = console.log
@WebSocketGateway()
export class EventsGateway {
@WebSocketServer() server;
@SubscribeMessage('events')
onEvent(client: any, payload: any): Observable<WsResponse<any>> | any {
// this.server.emit('resmsg', data); // io.emit('resmsg', payload)
let { name } = payload;
if (name === 'ajanuw') {
return of({
event: 'events',
data: {
msg: 'hello ajanuw!'
}
})
}
if (name === 'alone') {
return of('hi', '实打实')
.pipe(
map($_ =>
({
event: 'events', data: {
msg: $_
}
}))
);
}
return of(payload);
}
}
app.module.ts
import { EventsGateway } from './events/events.gateway'
@Module({
providers: [EventsGateway],
})
客户端
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.1.1/socket.io.js"></script>
<script>
const l = console.log
let socket = io('http://localhost:5000');
socket.on('connect', function () {
console.log('链接成功');
// 发射
socket.emit('events', {
name: 'ajanuw'
});
// 发射
socket.emit('events', {
name: 'alone'
});
// 发射
// socket.emit('identity', 0, (response) => console.log('Identity:', response));
});
// 监听
socket.on('events', (data) => {
l(data.msg)
});
</script>
监听进入与离开
import {
SubscribeMessage,
WebSocketGateway,
WsResponse,
WebSocketServer,
} from '@nestjs/websockets';
import { Observable, of } from 'rxjs';
const l = console.log;
let num = 0;
@WebSocketGateway()
export class EventsGateway {
@SubscribeMessage('message')
onEvent(client: any, payload: any): Observable<WsResponse<any>> {
num++
console.log(`有一位用户链接!> ${num}`);
client.on('disconnect', () => {
num--
console.log(`有人离开了...> ${num}`);
})
return of({ event: 'message', data: '233' });
}
}
Nest.js WebSocket的更多相关文章
- node.js Websocket实现扫码二维码登录---GoEasy
最近在做一个扫码登录功能,为此我还在网上搜了一下关于微信的扫描登录的实现方式.当这个功能完成了后,我决定将整个实现思路整理出来,方便自己以后查看也方便其他有类似需求的程序猿些. 要实现扫码登录我们需要 ...
- node.js Websocket消息推送---GoEasy
Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送 速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送 支持websocket ...
- Node.js+websocket+mongodb实现即时聊天室
ChatRoom Node.js+websocket+mongodb实现即时聊天室 A,nodejs简介:Node.js是一个可以让javascript运行在服务器端的平台,它可以让javascrip ...
- 基于Node.js + WebSocket 的简易聊天室
代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...
- [Next] Next.js+Nest.js实现GitHub第三方登录
GitHub OAuth 第三方登录 第三方登录的关键知识点就是 OAuth2.0 . 第三方登录,实质就是 OAuth 授权 . OAuth 是一个开放标准,允许用户让第三方应用访问某一个网站的资源 ...
- [Nest] 01.初见nest.js
github nest 介绍 Nest 是一个用于构建高效,可扩展的 Node.js 服务器端应用程序的框架.它使用渐进式 JavaScript,内置并完全支持 TypeScript(但仍然允许开发人 ...
- 在 Nest.js 中使用 MongoDB 与 TypeORM
在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ...
- Nest.js 6.0.0 正式版发布,基于 TypeScript 的 Node.js 框架
开发四年只会写业务代码,分布式高并发都不会还做程序员? Nest.js 6.0.0 正式版发布了.Nest 是构建高效.可扩展的 Node.js Web 应用程序的框架.它使用现代的 JavaSc ...
- nest.js tutorials
nest.js tutorials A progressive Node.js framework https://docs.nestjs.com//firststeps nest.js CLI ht ...
随机推荐
- set non-stop on
# Enable the async interface. set target-async 1 # If using the CLI, pagination breaks non-stop. set ...
- .ipynb格式文件
ipynb,即ipython notebook,需要用ipython notebook打开,IPython Notebook是web based IPython封装,但是可以展现富文本,使得整个工作可 ...
- 解决Linux系统80端口被占用的问题
有Linux在centos下面安装webmail服务遇到80端口被占用的问题,导致无法继续安装,下面详细介绍下Linux如何查看.查找.关闭监听80端口服务以更好的的解决80端口被占用的问题. 一.查 ...
- JAVA使用Logback发送日志到控制台、文件、ELK的最简单用法
一.简述 本文讲JAVA使用Logback发送日志到控制台.文件.ELK的最简单用法. 二.教程 1.新建pom.xml项目引入下列依赖: <dependencies> <!--Be ...
- Canvas 旋转的图片
var image = new Image(), counter = 0; image.onload = function () { var CANVAS_WIDTH = 300, CANVAS_HE ...
- System.IO.File.WriteAllText("log.txt", "dddd");
System.IO.File.WriteAllText("log.txt", "dddd");
- std::nothrow 的使用心得
std::nothrow 意思是说,不要跑出异常,改为返回一个nullptr. 一般的使用场景是,建议new的时候使用,避免使用try-catch来捕捉异常. 比如: float m_words = ...
- SpringBoot中自定义properties文件配置参数并带有输入提示
1. 创建配置类 在项目中创建一个参数映射类如下 @ConfigurationProperties(prefix = "user.info") public class MyPro ...
- python3 利用正则获取网页中的想保存下来的内容
需要获取某个网页中表格部分中某个产品的成份 分析在html中成份的元素代码 <a href="/composition/4c3060178d1184935a48c4e51be4f63f ...
- 微信小程序--data的赋值与取值
通过小程序官方文档可知:Page() 函数用来注册一个页面.接受一个 object 参数,其指定页面的初始数据.生命周期函数.事件处理函数等.其中的参数data用来设置初始数据,WXML 中的动态数据 ...