从后端角度看 php 中的 Flux 架构

Posted

技术标签:

【中文标题】从后端角度看 php 中的 Flux 架构【英文标题】:Flux architecture in php from Backend Perspective 【发布时间】:2016-01-02 03:09:20 【问题描述】:

严格从后端的角度来看,我如何实现 Flux 架构? 明确地说,MVC 设计模式实际上明确了文件应该如何排列,框架有自己的实现但仍然明确如何安排和组织项目。根据 Flux 架构,我应该如何构建我的项目代码?还有 是否有任何 Flux 架构的开源框架,比如 codeignighter 是用于 MVC 的?

在我阅读过的所有关于 Facebook 的 Flux 架构的文章和教程中,它们都使用 Nodejs 后端进行演示,前端通常是 reactJS(我也读过一篇使用 angularJS 的文章)。但他们都专注于前端视角。

我从来都不是 MVC 的粉丝,自从我发现 Micro-frameworks 以来,我一直使用我自己版本的 Modal-View 设计模式(令人惊讶地类似于精简的 Flux 模式)。但我一直对如何构建它感到迷茫。

Facebook 关于 Flux 模式的帖子解释了很多关于速度和安全性的内容。但是所有的教程都只关注 ReactJS。 Pluralsight 的教程、egghead 和我在过去一年中遇到的所有其他内容都使用 NodeJS 后端。其中 99% 并没有真正展示 Flux 架构,而是展示了使用 ReactJS。 所以经过将近一年的搜索,我仍然不清楚通量到底是什么。

【问题讨论】:

投反对票的人至少可以屈膝解释你投反对票的原因。你不喜欢的可以改变,你不明白的可以解释。匿名投票对任何人都没有帮助。你实际上是在阻碍某人的学习。 我没有给你投反对票,但可能是因为问题太广泛了 我编辑了问题并重组了我的问题,以便更清楚地了解我想要理解的内容。感谢@Rasclatt 的提示, 反对者应该发表评论。这个问题表明对反应、通量、可能是 mvc 和前端/后端分离的理解非常糟糕,但这不是投反对票的理由。至少发表评论。 【参考方案1】:

没有特定的后端架构,flux 模式是针对前端的。它也是用特定的反应元素构建的,这就是你找不到其他实现的原因。 您可以复制原理以便在另一个框架中生成相同的方案

【讨论】:

我不太确定这一点。 FB 特别表示 MVC 模式对于非常大的项目失败,延迟了向客户端的内容交付。所以他们将 Facebook 代码从 MVC 转移到了 Flux。我认为他们在谈论后端。 所以根据你的说法,我只需要后端,一个将数据转发给客户端的模式,客户端中的反应元素将在页面上显示它。我一直认为“DISpatcher”和“Action”是服务器组件。让我试试你的方法。 根本不是 dispatcher 是一个简单的前端单例,Action 是一个文件,它收集前端交互以及最终对服务器的调用。 React 和 Flux 都是关于前端的。我会说通量是一种 MV* 模式 在我目前的工作中,有 get 路由器加载第一页。然后我使用大量 $.ajax 请求发布路由器,它返回我在页面上更新的完整 html 代码。所以我只需要在前端从 $.ajax 切换到 ReactJS,调整后端返回的内容。我不需要对后端应用程序进行任何重大重组吗?我走上正轨了吗? 你误会了调度员。没有教程说它可以打电话。而且只有一名调度员。 Dispatcher 是一个在 action 和 store 之间进行通信的简单单例。您无需更新后端。还说“我只需要在前端从 $.ajax 切换到 ReactJS”没有任何意义。您将在操作中调用 ajax,然后操作将使用调度程序填充存储,然后视图将自动存储并更新。【参考方案2】:

php 没有通量模式。不过,有一个基于 libevent 的 php 服务器核心,称为 React.php。

您在考虑 mvc 和模式时提出了错误的问题,这就是为什么我将尝试解释不同的观点,甚至为什么他们使用 nodejs 示例。所以首先nodejs不是mvc,也不是框架,而是一个简单的服务器进程来调用工作线程——典型的php中的apache服务器/nginx,或者也称为“调度程序”。动作处理程序是简单的类,具有在事件或函数上运行的方法(想象一下原始的 php 方式,使用 Web 服务器作为路由器调用模板或代码的脚本,并且在 php 框架中没有路由器)。所以这有点像回到原始的 payternless php,但有一些不同:

动作处理程序是休眠的工作人员。他们不会在没有事件的情况下执行,并且可能是数千个。如果它们启动了,我们可以在服务器死机之前说 10 点。

动作句柄的代码非常少且专门的代码使用尽可能少的资源,并尽可能在 0.000x 秒内运行。喜欢简单的

回声“你好世界”;

而不是框架。你需要假设每个线程 8mb 而不是 300mb 来运行 symfony 2。

您有一个 php 应用程序正在运行并充当 apache 的替代品。以同步非阻塞模式(libevent 方式)与 websockets 建立连接

所以 nodejs 被构建为一个可扩展的调度器,并且 js 仍然没有因设计模式和框架而臃肿。这就是他们使用它作为示例的原因——它打破了“这是不恰当的,因为不是设计模式和框架代码”。

对于通量,您需要回到原始的 php 思维方式,相信 Rasmus Lerdorf 的话“它们都糟透了!”关于他对框架的看法,然后使用多线程原始 php 非常简单且节省资源的代码来扩展这个想法。

这就是为什么 facebook 以“MVC 对大型项目来说是一个糟糕的范例,无法支持或扩展。我们创建了一个架构来打破它。”开始了第一个通量演示。设计模式深深地基于mvc。 Flux 以简单的 oop 表示形式返回到功能类似的代码,以提高可读性。但是对于每个表记录来说,更少的类和继承以及没有模型/实体的简单代码是必须的。

所以有一个基于 Symphony react 的包,它可以从 symfony 项目中创建一个应用程序。但是你使用 sumfony 来启动调度程序,然后你应该疯狂地使用学说、树枝等。 Apache + symfony 和 http 请求会更好,因为脚本死掉了,你不需要为 5000 个线程中的每一个保留 100mb,但每次 300mb x 5。如果你使用flux,你会忘记mvc。再说一遍,FLUX 是一种忘记 MVC、模式和框架的方法,开始思考业务问题和需求,再次编写清晰简单的代码。

【讨论】:

Dbf,我不是以英语为母语的人,作为程序员,我的解释很混乱。感谢您的更正。

以上是关于从后端角度看 php 中的 Flux 架构的主要内容,如果未能解决你的问题,请参考以下文章

02 宏观角度看 Spark 架构原理

从服务传递到组件的角度错误消息

如何以角度保存和加载来自 html WYSIWYG 编辑器的内容

新浪微博基于混合云的PHP服务化与弹性扩容

如何正确过滤角度数组

无法修复 CORS 错误(角度 + java spring)