繁体   English   中英

如何使 Python 套接字在 Flask 应用程序的后台接受连接?

[英]How to make Python socket accept connections in background in a Flask App?

我是 Flask 的初学者。 我在 Flask 的一个小网站上工作,我的目标是在后台设置一个接受连接的套接字。 这是代码:

@app.route('/dashboard/')
@login_required
def dashboard_page():
    s = lancer_socket()
    accepter_msg(s)   #if i comment out this line, the template loads
    return render_template('dashboard.html',info = info,tel_conns=tel_conns)

但是,函数 'accepter_msg' 使模板无法加载。 这是代码:

 def accepter_msg(socket):
    while True:
        Client, addresse = socket.accept()
        print('Connecté à: ' + addresse[0] + ':' + str(addresse[1]))
        start_new_thread(threaded_client, (Client, ))

我的目标是加载仪表板页面,并使套接字接受连接并在后台接收数据(之后,我将使用修改后的变量(信息和 tel_conns)刷新模板:

render_template('dashboard.html',info = info,tel_conns=tel_conns)

我需要使用一个简单的 python 套接字,而不是 socketio 或其他任何东西。 谁能帮我 ?

如果您正在设置套接字服务器以接受 websocket 连接,请考虑使用Flask-SocketIO

socket.accept调用是一个阻塞函数调用,这意味着该函数在客户端连接到它之前不会返回。 因此,当此阻塞函数调用未返回时,您的render_template甚至都不会启动。 函数不返回仅仅意味着它挂在那里。

Client, addresse = socket.accept()

如果你真的想使用socket.accept ,你需要让它成为一个非阻塞套接字。 怎么做? 这篇 realpython 文章有很好的例子。

https://realpython.com/python-sockets/

另请阅读此官方文档Socket Programming HOWTO以更好地了解套接字编程。

https://docs.python.org/3/howto/sockets.html

您正在使用阻止以下命令的while True循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM