Flask Socket-IO让服务器等待客户端回调

问题描述 投票:0回答:1

我正在用flask socket-io构建一个纯python应用程序。目前,我正在尝试让服务器向特定客户端发出事件,并在继续之前等待回调。这是我的Server.py

import socketio
import eventlet

sio = socketio.Server(async_handlers=False)
app = socketio.WSGIApp(sio)

@sio.event
def connect(sid, environ):
    nm = None
    def namee(name):
        print(name) # this has the value and is trying to assign it to nm
        nonlocal nm
        nm = name
    sio.emit('name_', "name plz", callback=namee)
    print(nm) # this shouldn't be None, but it is
    print(sid, "in lobby")

@sio.event
def disconnect(sid):
    print('disconnect', sid)

if __name__ == '__main__':
    eventlet.wsgi.server(eventlet.listen(('', 5000)), app)

这是我的client.py

import sys
import socketio

sio = socketio.Client()


@sio.event
def connect():
    print("you have connected to the server")


@sio.event
def connect_error(data):
    print("The connection failed!")


@sio.event
def disconnect():
    print("You have left the server")

@sio.event
def name_(data):
    print("name asked for")
    return "test"

def main():
    sio.connect('http://localhost:5000')
    print('Your sid is', sio.sid)


if __name__ == '__main__':
    main()

我尝试使用time.sleep(),但是这延迟了整个过程。我也尝试过进行while循环

while nm is None:
    pass

但是将客户端从服务器上踢了出来,不久之后,服务器崩溃了。

python flask socket.io flask-socketio
1个回答
0
投票

您可以使用call()方法代替emit()

    nm = sio.call('name_', "name plz")
    print(nm)

尽管我建议您将此逻辑移到connect处理程序之外。该处理程序只是接受或拒绝连接,不应长时间阻塞。建立连接后,请在您使用的常规处理程序中执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.