理解socket.io回调

2024-04-27 19:05:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图确保websocket发出的消息是双向接收的,所以,如果从客户端丢失消息,客户端将重试,服务器也会重试。我对回调不太熟悉,我所读到的只是它们存在,你可以使用它们,但我没有找到任何好的例子来说明如何使用它们,或者我不理解这些例子

这基本上是我现在的代码

在index.html中

 <script type="text/javascript" charset="utf-8">
        $(document).ready(function() {
            namespace = '/socket';

            // Connect to the Socket.IO server.
            // The connection URL has the following format:
            //     http[s]://<domain>:<port>[/<namespace>]
            var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);

            // Event handler for new connections.
            // The callback function is invoked when a connection with the
            // server is established.
            socket.on('connect', function() {
                isopen = true;
                socket.emit('join_room');
            });
        });
    });


</script>

穿着短袜

@socketio.on('join_room', namespace='/socket')
def on_room():
    if 'uid' not in session:
        session['uid'] = str(uuid.uuid4())
    room = str(session['uid'])

    print('join room {}'.format(room))

    join_room(room)

因此,在本例中,客户端html代码将发出join_room,我希望客户端验证服务器是否已收到它,如果没有,请再次尝试发出join_room

这必须在两个方向上进行

有没有办法做到这一点


Tags: the代码服务器消息客户端uidonsession
1条回答
网友
1楼 · 发布于 2024-04-27 19:05:45

您可以在发出调用中添加回调:

socket.emit('join_room', () => { console.log('callback received!'); });

如果希望服务器在回调中传递信息,请在服务器处理程序中添加return语句:

@socketio.on('join_room', namespace='/socket')
def on_room():
    if 'uid' not in session:
        session['uid'] = str(uuid.uuid4())
    room = str(session['uid'])

    print('join room {}'.format(room))

    join_room(room)

    return 42

然后,服务器返回的内容将作为参数传递给回调:

socket.emit('join_room', (arg) => { console.log('callback received with ' + arg); });

相关问题 更多 >