推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
doco

nestjs 使用 socket.io 时里面的 server 相当于什么呢? 另求一个获取房间中客户端列表的方法

  •  
  •   doco · Feb 18, 2021 · 2164 views
    This topic created in 1919 days ago, the information mentioned may be changed or developed.

    nestjs 文档里标明它的 socket.io 使用的是 2.x 版本, 因此我参考的文档也以 2.x 版本为准
    nestjs 文档里说如果想获取 server 实例则可以使用

    @WebSocketServer()
    server: Server;
    

    这里的 server 相当于 socket.io 里的什么呢? 我查看 socket.io 文档里面的 server 实例应该是 io, 即

    io = new Server();
    

    并且也有说明 io.sockets = io.of('/'). 在获取当前房间的所有用户时, 参照stackoverflow里的说明, 使用了

    const clients = this.server.sockets.adapter.rooms['Room Name'].sockets;
    

    在不带有命名空间(namespace)时以上代码运行正常.
    然而在带有 namespace 时参照上述代码, 修改为

    const clients = this.server.of('...').adapter.rooms['Room Name'].sockets;
    

    这时会报错: this.server.of is not a function. 表明 server 和 io 又不是一个东西. 那这里的 server 具体是什么呢?


    有没有大神能给一个在 nestjs 中使用 socket.io 时获取当前 namespace, 当前 room 中所有客户端的方法呢? 我找了好多地方给的都是这样的代码

    Supplement 1  ·  Feb 19, 2021
    感觉 nestjs 的资料好像不是很多, 官方文档写得也不是很详细, 中文文档都不如百度翻译. 各位有推荐的查找 nestjs 资料的地方吗?
    Supplement 2  ·  Feb 19, 2021

    乱改了一下跑通了...感觉这里的server指的是io.of(...), 并且和@type/socket.io里面的类型判断不一致, 有很多东西都不一样. 用的是

    const io: any = this.server;
    const clientIds = io.adapter.rooms[`${room}`].sockets;
    

    如果连起来就会提示atapter里面没有rooms字段

    2 replies    2021-02-19 07:55:52 +08:00
    RedBeanIce
        1
    RedBeanIce  
       Feb 18, 2021
    。。。你的意思是,获取一个群里面所有的在线用户列表吗
    doco
        2
    doco  
    OP
       Feb 19, 2021
    @RedBeanIce #1 我想获取某个 namespace 下某个 room 里的客户端列表, 应该差不多吧
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1438 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:03 · PVG 01:03 · LAX 10:03 · JFK 13:03
    ♥ Do have faith in what you're doing.