Twisted/Cyclone/Tornado的高阶Web框架/附加组件(Web登录/用户/管理员)?

10

我正在为一个可扩展的物联网应用程序做一些架构选择方面的努力。

我选择基于Twisted,并使用Cyclone框架来提供许多Tornado便利功能(WebSockets、认证装饰器、安全Cookie等)。

对我来说,使用Twisted核心非常完美。我有很多IP协议和硬件接口,发现它们都有很好的库支持(添加新协议和接口到我的应用程序是我可能会遇到的最有可能的项目范围蔓延角度),而且Twisted需要很低的CPU,并提供非常高的连接数。

我的问题在于二级Web应用程序功能。

我引入了Cyclone,认为它的身份验证好处(OpenID、OAuth、用户认证装饰器和安全Cookie)不需要在我的Web应用程序中实现用户/会话/管理员功能。但在抽象化我的数据库(通过txmongo)和仅仅构建用户登录的500多行代码后,我发现我既要:

  1. 不理解小型Cyclone/Tornado在用户/会话/管理员空间中所起的作用,以及
  2. 不理解如果您试图构建一个多用户认证Web应用程序,需要填补多少代码空缺。
一位朋友向我介绍了 Flask,起初我认为它完全多余,直到我发现了 flask插件 Flask-Login Flask-Admin的组合可以完全满足我的用户、会话和用户管理需求,省下我大约两千行代码。不幸的是,flask插件中都有阻塞代码和调用阻塞库。即使使用 WSGI 容器,由于每次页面载入时都需要进行用户/会话功能,我不认为它们与我的项目兼容(此外,我也没有看到任何简便方法能够将它们移植到异步世界而不重写代码)。我的问题是:
在Python异步空间中(...希望在Twisted空间中,考虑到我的协议需求),是否有任何插件或替代框架提供类似于Flask-Login和Flask-Admin的即用型用户/登录/管理功能?
附言:我已经看过Klein作为显而易见的Twisted版本的Flask,但它似乎没有插件生态系统,并且我在那里找不到任何强大的用户/会话/管理员。
再附言:在我写这个问题的时候,我已经写了自己(糟糕的)用户登录会话系统。因此,我真正想要的是“管理员”功能(对用户样式记录的自动CRUD函数,包括Web UI渲染,所有这些都是以Twisted/异步方式设计的)。我在问题中问及用户/登录,以防万一已经有一个已经集成的解决方案(例如flask-login和flask-admin),在这种情况下,我将很高兴放弃我的代码并切换到该解决方案。

3
有一些人尝试为Tornado添加会话支持,但它们似乎都已不再维护:https://github.com/milancermak/tornado、https://github.com/diogobaeder/pycket。我没有使用过它们,所以不确定它们的质量。至少你可以借鉴一些代码。 - dano
flask-socketio具有异步支持。请查看:http://flask-socketio.readthedocs.org/en/latest/ - chfw
你真的不需要完全异步的管理员,对吧?在这种情况下,您可以在扭曲的WSGIResource中使用Flask-Admin。至于会话问题,我也是来寻找同样的答案的 :) - dpn
@Mike Lutz:听起来你似乎想把很多责任都推到 Web 服务器上。我最大的建议是提醒你,并不是所有东西都必须在同一个库或同一实例中运行。 - Zoran Pavlovic
1
@dpn 我不明白为什么你不想使用异步。如果你正在使用 Twisted,那么你可能有一个非常好的使用案例来进行异步操作。混合同步代码是一个坏主意。我也在寻找 Twisted 中的用户管理。据我所知,这是 Twisted 生态系统中最大的缺失。 - Sjuul Janssen
Sjuul Janssen - 异步编程是关于扩展性的,如果你需要将管理界面扩展到超出Twisted提供的线程池范围之外,那么就这样做吧,但这并不妨碍你在Flask Admin中使用Twisted。 - dpn
1个回答

2

你真的需要所有东西都异步吗?考虑使用异步WebSockets,但同步页面渲染。如果必须使用异步,请添加一个异步下游代理或负载均衡器,这将几乎消除应用程序服务器的IO开销。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接