【发布时间】:2014-03-08 03:49:49
【问题描述】:
我正在使用 node.js 和 express.io 开发一个简单的聊天应用程序
我想一直显示已连接客户端(或在线聊天)的列表。
在express.io's doc 中,没有明确的方法说明如何在新客户端进入房间后“获取”已连接客户端的列表,即只有“广播”而不是“获取”。
以前有人做过吗?
任何线索都会很有帮助。
谢谢!
编辑:
在尝试@jibsales 的回答之后。我想我们快到了。客户返回给我的不是实际的客户数组,而是这个:
[ { id: 'OWix3sqoFZAa20NLk304',
namespace:
{ manager: [Object],
name: '',
sockets: [Object],
auth: false,
flags: [Object],
_events: [Object] },
manager:
{ server: [Object],
namespaces: [Object],
sockets: [Object],
_events: [Object],
settings: [Object],
handshaken: [Object],
connected: [Object],
open: [Object],
closed: [Object],
rooms: [Object],
roomClients: [Object],
oldListeners: [Object],
sequenceNumber: 496205112,
router: [Object],
middleware: [],
route: [Function],
use: [Function],
broadcast: [Function],
room: [Function],
gc: [Object] },
disconnected: false,
ackPackets: 0,
acks: {},
flags: { endpoint: '', room: '' },
readable: true,
store: { store: [Object], id: 'OWix3sqoFZAa20NLk304', data: {} },
_events:
{ error: [Function],
ready: [Function],
connection: [Function],
NewChatPrivateLine: [Function],
NewIdea: [Function],
NewChatLine: [Function],
NewPost: [Function] } } ]
功能有:
var app = require('express.io')();
app.io.route('connection', function(req) {
req.io.join(req.data.room);
var clients = app.io.sockets.clients(req.data.room);
console.log(clients)
app.io.room(req.data.room).broadcast('announce', {
user: req.data.user,
clients: clients
})
});
这实际上返回了一个错误(data = JSON.stringify(ev); TypeError: Converting circular structure to JSON),因为数组有多个循环对象,因此无法广播。
有什么想法吗?
【问题讨论】:
-
您总是可以在它们连接时跟踪它们吗?
-
我正在尝试类似的方法,但结果非常复杂,因为我认为可以通过更简单和优雅的方式解决。你有一个想法来跟踪代码吗?
标签: node.js express chat express.io