【发布时间】:2019-11-13 07:48:05
【问题描述】:
我正在用流星制作一个简单的聊天室。我如何获得当前活跃用户的列表?有没有办法实际获取当前连接/客户端的列表?
【问题讨论】:
-
你可以在当前用户中放置一个活跃的字段,当它登录或进入时指定房间改变他的活跃状态。
-
@crapthings 当他断开连接时会怎样?
标签: javascript meteor
我正在用流星制作一个简单的聊天室。我如何获得当前活跃用户的列表?有没有办法实际获取当前连接/客户端的列表?
【问题讨论】:
标签: javascript meteor
我昨天浏览了流星来源,看看是否已经有类似的东西。我找不到连接的标志或任何东西......
我认为你有两个选择:
在客户端和服务器中为每个连接的用户实现心跳。我个人不太喜欢这个想法,因为这可能会导致在您的服务器上运行无数个间隔.
使用 sockjs 服务器获取打开的套接字。 Meteor.default_server.stream_server.all_sockets() 返回一个包含所有打开的套接字的数组。您可以有一个单一的时间间隔来寻找其中的变化(或者更好的是,您将聆听 sockjs 服务器本身的变化,有一个可能有用的 register 方法),将打开的套接字映射到您的用户并使用收藏以将其推送给您的客户。
每个客户端都知道他的套接字 id,所以映射不应该太难。
我还没有实现它,所以这些只是从哪里开始的想法。
【讨论】:
Meteor.default_server.stream_server.open_sockets,它是 SockJSConnections 本身的数组,而不是 fn
我创建了一个 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 连接吗?