【问题标题】:Flask SocketIO send message from server to roomFlask SocketIO 将消息从服​​务器发送到房间
【发布时间】:2015-09-20 22:37:31
【问题描述】:

在我的app 中,我需要client 加入room 以便它可以从我的server 发送receive 消息。

服务器代码

@socketio.on('join', namespace='/test')
def join(message):

    join_room(message['room'])
    room = message['room']
    emit('my response', {'data': 'Entered the room ' + message['room']}, room=room)


@app.route('/scan/user/<int:user_id>/venue/<int:venue_id>', methods = ['POST'])
@auth.login_required
def scan_tablet_user_func(user_id, venue_id):

    room = 'venue_' + str(venue_id)
    socketio.emit('my response', {'data': json.dumps(my_info, ensure_ascii=False)}, room=room)

客户端代码

$('form#join').submit(function(event) {
            socket.emit('join', {room: $('#join_room').val()});
            return false;
        });

webpage 加载后,我将"venue_1" 输入到名为"join"webpage form

server 一侧的variable room 也设置为"venue_1"

问题是当我拨打API/scan/user/... 时,我的client 上什么也没有出现。然而,

emit('my response', {'data': 'Entered the room ' + message['room']}, room=room)

确实显示正确。

【问题讨论】:

    标签: python flask flask-socketio


    【解决方案1】:

    我认为你需要在 API 调用中为你的 emit 提供一个命名空间参数,因为你已经定义了一个命名空间。

    socketio.emit('my response', {'data': json.dumps(my_info, ensure_ascii=False)}, room=room, namespace='/test')

    如果您不提供命名空间,您将使用默认命名空间。

    【讨论】:

    • 正确。当您回复客户端发送的事件时,命名空间是从客户端事件中获取的。当服务器是发起者时,该上下文不存在,因此您必须提供命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2015-09-22
    • 2015-06-10
    • 2017-08-16
    • 2022-06-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多