• 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' });
      }
    }
    
  • 相关阅读:
    2016 -03-08 静态库 .a
    2016 -03 -07 搜索功能 模糊查询
    2016 -03 -07 字符串是否包含字符串/字符
    2016-03-04 一个完整的model 样式
    2016-03-01 地图定位 以及失败
    2016-03-01 svn conerstone
    2016-03-01 svn .a 不能上传到conerstone上的解决
    2016-02-29 不能真机调试的问题
    2016-02-28 00:53:21 version 与build
    Add Two Numbers
  • 原文地址:https://www.cnblogs.com/ajanuw/p/9734517.html
Copyright © 2020-2023  润新知