1

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

因此,当用户在聊天中输入内容时,此代码会按顺序触发

$('#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

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

它又调用emit_to_room了在 RoomsMixin 类中找到的这个函数

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 代码?发射函数如何知道将响应发送到哪个房间?

4

0 回答 0