gevent-socketio:浏览器接收另一个浏览器的响应

时间:2013-05-01 13:29:36

标签: django socket.io gevent gevent-socketio

我已经尝试了几天,但我似乎无法绕过这个。我的问题基本上在于,如果我有2个浏览器同时请求,我的服务器端socketio响应会将错误的结果返回给错误的浏览器请求(结果被交换)。我认为我的问题是我不知道socket.io如何确定将结果返回到哪个浏览器。当前的代码有很多可移动的部分,剥离人们可以找到有意义的方式是很痛苦的,相反,我认为如果有人可以帮助我完成并理解在的django_chat示例,我将能够解决我的错误。 https://github.com/abourget/gevent-socketio/tree/master/examples/django_chat。所以这里:

顺便说一句,当用户在聊天中输入内容时,此code会触发

$('#send-message').submit(function () {
    message('me', $('#message').val());
    socket.emit('user message', $('#message').val());
    clear();
    $('#lines').get(0).scrollTop = 10000000;
    return false;
});

socket.emit函数会在ChatNameSpace类中触发this function

def on_user_message(self, msg):
    self.log('User message: {0}'.format(msg))
    self.emit_to_room(self.room, 'msg_to_room',
        self.socket.session['nickname'], msg)
    return True

反过来调用RoomsMixin类中的emit_to_room函数

def emit_to_room(self, room, event, *args):
    """This is sent to all in the room (in this particular Namespace)"""
    pkt = dict(type="event",
               name=event,
               args=args,
               endpoint=self.ns_name)
    room_name = self._get_room_name(room)
    for sessid, socket in self.socket.server.sockets.iteritems():
        if 'rooms' not in socket.session:
            continue
        if room_name in socket.session['rooms'] and self.socket != socket:
            socket.send_packet(pkt)

据我所知,当用户加入聊天室时,[rooms]会话会根据他所属的聊天室进行更新。它看起来像['/chat_1', '/chat_2'],其中数字表示房间对象的主键。

这是我迷路的地方。特定聊天室的这种区别在哪里符合前端js代码? emit函数如何知道将响应发送到哪个房间?

0 个答案:

没有答案