python - 如何为逻辑上分离的 Flask 路由分离套接字?

标签 python flask socket.io flask-socketio

我设置了一个相当复杂的 Flask 项目结构,它使用蓝图将不同的“模块”彼此分开,然后在每个模块中使用不同的路由。我现在想使用flask-socketio 库向该项目添加套接字功能。我的目标是将每个套接字分配给它自己的线程,由一个对象管理。我现在面临的问题是我不确定如何正确地将套接字彼此分开。

(请注意,我现在正处于实验阶段,我还没有最终的概念,因此没有结论性的代码片段可以显示)

据我了解,每个套接字都有一个唯一的套接字 ID,当上下文位于套接字事件内时,该 ID 存储在flask.request.sid 中​​。这太棒了,因为我可以使用它来将事件与打开的套接字匹配,这意味着我知道哪个“断开连接”事件属于哪个“连接”事件,因为如果它们属于同一个套接字,则它们具有相同的套接字 ID套接字连接。

现在问题开始了。我试图找到一种方法,根据从套接字调用套接字的路由,该套接字具有不同的事件处理程序。这意味着路由 .../admin/a 管理的事件与 .../admin/b 不同,因为这两个路由都通向我的 Web 应用程序的不同逻辑部分。在更大的范围内,我只有一个全局套接字对象在我的应用程序的所有蓝图中共享。如果我添加一个事件处理程序来对蓝图 1 的套接字反馈使用react,我绝对不希望蓝图 2 也能够用它自己的套接字触发它。

处理套接字分离的推荐方法是什么?这是否是在实践中使用的东西,或者我对如何在 Web 应用程序中使用套接字连接有根本错误的理解?

最佳答案

如果您有不同的套接字事件逻辑组并且希望彼此独立,则可以为每个逻辑组使用不同的命名空间。在 Socket.IO 中,一个或多个命名空间可以在同一物理传输上复用。

如果您喜欢更简单的内容,只需避免分配给事件的名称发生冲突即可。

关于python - 如何为逻辑上分离的 Flask 路由分离套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56867887/

相关文章:

python - 解析 JSON 对象时,保留字作为数据类中的属性名称

node.js - NodeJS + 套接字 : Scaling and preventing single point of failure

python - 通过代理服务器进行socket编程

Python导入类似于Django设置文件

java - 在命令行或Rest客户端中执行脚本

python - .ply 多边形网格到 2D 深度图

flask - jinja2.exceptions.TemplateSyntaxError : Encountered unknown tag 'url'

python - Flask 中的速度优化

python - 使用 flask-reSTLess 出现 404 错误

node.js - 套接字通信