【问题标题】:meteor currently active users?流星目前活跃用户?
【发布时间】:2019-11-13 07:48:05
【问题描述】:

我正在用流星制作一个简单的聊天室。我如何获得当前活跃用户的列表?有没有办法实际获取当前连接/客户端的列表?

【问题讨论】:

  • 你可以在当前用户中放置一个活跃的字段,当它登录或进入时指定房间改变他的活跃状态。
  • @crapthings 当他断开连接时会怎样?

标签: javascript meteor


【解决方案1】:

我昨天浏览了流星来源,看看是否已经有类似的东西。我找不到连接的标志或任何东西......

我认为你有两个选择:

  • 在客户端和服务器中为每个连接的用户实现心跳。我个人不太喜欢这个想法,因为这可能会导致在您的服务器上运行无数个间隔.

  • 使用 sockjs 服务器获取打开的套接字Meteor.default_server.stream_server.all_sockets() 返回一个包含所有打开的套接字的数组。您可以有一个单一的时间间隔来寻找其中的变化(或者更好的是,您将聆听 sockjs 服务器本身的变化,有一个可能有用的 register 方法),将打开的套接字映射到您的用户并使用收藏以将其推送给您的客户。 每个客户端都知道他的套接字 id,所以映射不应该太难。

我还没有实现它,所以这些只是从哪里开始的想法。

【讨论】:

  • 虽然这个答案很好(我也一直在寻找这个),但现在是 2019 年,我想知道为什么 Meteor 还没有给我们一个官方的解决方案......
  • 现在是 Meteor.server 而不是 Meteor.default_server
  • 在 Meteor 2.2 上......似乎两者都仍然可用。你知道是否有区别吗?0 另外,看起来它现在是 Meteor.default_server.stream_server.open_sockets,它是 SockJSConnections 本身的数组,而不是 fn
  • 我在 METEOR@2.5.1 并且 Meteor.server.stream_server.all_sockets() 工作
【解决方案2】:

我创建了一个 REST 端点来公开当前活跃用户的数量...

/server/main.js

import bodyParser from 'body-parser'
import { Picker } from 'meteor/meteorhacks:picker'

Picker.middleware(bodyParser.json())

Picker.route('/api/status', ({ provider }, request, response) => {
  response.statusCode = 200
  response.end(JSON.stringify({
    active_users: Meteor.default_server.stream_server.all_sockets().length
  }))
})

输出

{"active_users":1}

【讨论】:

  • 知道有什么方法可以关闭从all_sockets() 收到的 WS 连接吗?
猜你喜欢
  • 2014-03-25
  • 2013-11-12
  • 1970-01-01
  • 2019-08-30
  • 2013-02-27
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多