zoukankan      html  css  js  c++  java
  • 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' });
      }
    }
    
  • 相关阅读:
    组合和封装
    面向对象之继承与派生
    实例化产生对象和绑定关系
    面向对象程序设计和类
    常用模块(hashlib、suprocess、configparser)
    常用模块re模块(正则表达式)
    包及常用模块(time、datetime、random、sys)
    python内置函数大全
    软件开发规范及常用模块
    [NOI Online 提高组]序列 (并查集+二分图判定)
  • 原文地址:https://www.cnblogs.com/ajanuw/p/9734517.html
Copyright © 2011-2022 走看看