如何通过flask-socketio中的sid给指定的客户端发送消息

我是在做视频通话(通知对方的时候遇到的问题),于是写了个小的demo来测试,结果也是走不通。
这是我demo的逻辑:通过在内存或者redis中保存登录之后,前端发送的store sid 事件,将用户的sid保存下来,方便后面去指定发送给某个用户,但是对方客户端接收不到我响应的socketio事件,后端也不报错,请问我是哪里做错了

前端代码(登录成功之后,发送store sid事件,保存用户的sid)

<script type="text/javascript">
    var socket = io('http://192.168.1.24:2323');
    $('#login').click(function () {
        $.ajax({
            url: '/login',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({
                account: $('#account').val(),
                password: $('#password').val()
            }),
            success: function (data) {
                if (data.code === 200) {
                    socket.emit('store sid', {'uid': data.uid});
                    window.location = '/home'
                }
            },
            error: function (data) {
                console.log(data.code)
            }
        })
    })
</script>

前端代码(发送消息)

<html>
<title>chatting page</title>
<body>
    <input type="hidden" value="{{ uid }}" id="uid">
    <input type="hidden" value="{{ cid }}" id="cid">
    Message: <input type="text" id="msg">
    <button id="send">Send</button>
</body>
<script type="text/javascript" src="{{ url_for('static', filename='js/jquery-3.5.1.min.js') }}"></script>
<script type="text/javascript" src="{{ url_for('static', filename='js/socket.io.js') }}"></script>
<script type="text/javascript">
    var socket = io('http://192.168.1.24:2323');
    $('#send').click(function () {
        socket.emit('new message', {
            'msg': $('#msg').val(),
            'uid': $('#uid').val(),  // html代码中隐藏
            'cid': $('#cid').val()  // html代码中隐藏
        })
    });
    socket.on('new message resp', function (data) {
        console.log(data)
    })
</script>
</html>

后端socketio事件(namespace为默认的 / )

# 存储用户的sid
all_sid = {}


@socketio.on('store sid')
def store_sid(data):
    # uid is user_id
    all_sid[data['uid']] = request.sid


@socketio.on('new message')
def new_message(data):
    # uid is user_id
    to_user_id = data['uid']
    emit('message response', {'message': 'this is new message.'}, room=all_sid[to_user_id])

版本:
python 3.7.8
flask-socketio 4.3.1

出现的效果是,后端发送的message response事件,前端接收不到数据,前端console不打印,后端也不报错,但是我如果换成广播(broadcast=True),就不报错

你的前端代码有监听 message response 事件的函数吗?你给出的代码里没看到。另外相关的 uidto_user_id 这些最好打印下确认都存在对应的值。

讨论转移到 通过flask-socketio中的sid给指定的客户端发送消息,对方接收不到