目前,我有一个运行小型Web前端的Flask服务器以及同一服务器的命令行界面。基本思想如下:
<Top section: allows file upload>
* list of files from database
<Second section: allows file manipulation/ upload>
* list of files from database
<Third section: Not files, but still allows for database changes>
* list of things made from database
现在这可以从前端运行良好,但是目前如果CLI或其他客户端对数据库进行了更改,则它不会更新其他客户端。我有点使用JS轮询和每10秒重写一次文件列表,但这似乎既低效又看起来非常混乱,如果我必须为每个部分做。我看到各个论坛中提到的websockets,但是我从未使用它们,并且不确定添加它是否会很痛苦。我并没有试图为一个功能重写整个内容。
最终结果:如何更好地更新所有客户端而不是轮询/如何有效地进行轮询?
答案 0 :(得分:2)
是的,你是对的。您需要 sockets 。互联网上有大量文章,但我想提供一个摘要,并尝试解释为什么套接字最符合您的要求。
套接字是实现客户端和服务器之间双向通信的方式,无需轮询。
有一个名为Flask-SocketIO
的软件包Flask-SocketIO为Flask应用程序提供低延迟访问 客户端和服务器之间的双向通信。
然后,对于您希望在一个客户端对您的数据库或某些类似的东西进行某些工作时向所有连接的客户端发送更改的情况,您将需要使用广播。在启用广播选项的情况下发送消息时,连接到命名空间的所有客户端都会接收它,包括发件人。 Here您可以使用Flask-SocketIO找到广播的详细信息。