V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
doco
V2EX  ›  JavaScript

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

  •  
  •   doco · 2021-02-18 20:48:47 +08:00 · 1664 次点击
    这是一个创建于 1359 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 中所有客户端的方法呢? 我找了好多地方给的都是这样的代码

    第 1 条附言  ·  2021-02-19 08:56:43 +08:00
    感觉 nestjs 的资料好像不是很多, 官方文档写得也不是很详细, 中文文档都不如百度翻译. 各位有推荐的查找 nestjs 资料的地方吗?
    第 2 条附言  ·  2021-02-19 13:43:15 +08:00

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

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

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

    2 条回复    2021-02-19 07:55:52 +08:00
    RedBeanIce
        1
    RedBeanIce  
       2021-02-18 21:14:14 +08:00
    。。。你的意思是,获取一个群里面所有的在线用户列表吗
    doco
        2
    doco  
    OP
       2021-02-19 07:55:52 +08:00
    @RedBeanIce #1 我想获取某个 namespace 下某个 room 里的客户端列表, 应该差不多吧
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:04 · PVG 06:04 · LAX 14:04 · JFK 17:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.