0
我的情况是这样的:Socket.io广播停止工作,然后再结合命名空间
- 用户A与
- 用户B联接创建命名空间
- 他所选择的名称创建命名空间用户A发送由服务器广播并由接收的消息用户B
- 用户B发送这是由服务器广播和接收用户A
- 用户B通过客户端socket.disconnect叶命名空间()消息;
- 用户B重新加入命名空间
- 用户B发送这是由服务器广播的和由用户A
- 用户A发送消息,该消息由服务器和NOT广播接收到的消息通过用户B接收到的
重要事项:
- 如果用户B刷新页面并重新加入该命名空间而用户A仍然在那里,他可以 然后正常发送和接收一次邮件。
- 当用户B是''不工作'状态,他似乎仍然通过套接字发射获取事件。换句话说,只有用户A接收双方发起的事件,其中用户B仅接收由他自己发起的事件。
为什么,当用户B叶并重新加入服务器是否会成为相对于他一个单行道?
服务器代码:
var app = require('express')()
, server = require('http').createServer(app)
, io = require('socket.io').listen(server);
server.listen(8080);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
var connection_function = function(socket) {
socket.on('join_chat', function(data) {
socket.set('fb_id', data.id);
socket.emit('joined_chat', data);
socket.broadcast.emit('joined_chat', data);
socket.namespace.connected_users[data.id] = data;
});
socket.on('send_message', function(data) {
data.user = socket.namespace.connected_users[socket.store.data.fb_id];
socket.emit('recieve_msg', data);
socket.broadcast.emit('recieve_msg', data);
});
socket.on('disconnect', function() {
socket.broadcast.emit('left_chat', socket.namespace.connected_users[socket.store.data.fb_id]);
delete socket.namespace.connected_users[socket.store.data.fb_id];
});
}
var chats = {};
var main = io.of('/main');
main.on('connection', function(socket) {
socket.on('new_chat', function(data, fn) {
if(!chats.hasOwnProperty(data.chat_name)) {
chats[data.chat_name] = io.of('/' + data.chat_name);
chats[data.chat_name].on('connection', connection_function);
chats[data.chat_name].connected_users = {};
}
fn(data);
});
});
更新(星期五二零一二年十月十二日)
经过一些调查研究看来该问题可能与socket.io:
https://github.com/LearnBoost/socket.io-client/issues/251
https://github.com/LearnBoost/socket.io-client/issues/473
是的,我敢肯定 –
嗡嗡声,以及您的例子看起来像你试图做的很多,这:“socket.namespace.connected_users [data.id] = data;”看起来不对,我会简化你的代码,在这里命名空间的例子:http:// socket。 io /#如何使用 –
呃,谢谢你的试用,如果我没有解决问题,我会在几天内给你一个赏金 –