【问题标题】:Haskell web applications using PHP as a "front end"使用 PHP 作为“前端”的 Haskell Web 应用程序
【发布时间】:2011-06-14 15:03:09
【问题描述】:

在 Haskell Web 开发世界中发生了一些伟大的事情,一些可用的框架(Yesod 和 Snap 服务器)似乎相当成熟。但是学习曲线可能有点陡峭,也许构建 Web 应用程序并不能完全被认为是 Haskell 的强项。

另一个SO question of mine 的回答表明应该可以在Haskell 中编写PHP 扩展。事实上,我目前正在尝试将一个小型 Haskell 程序转换为 PHP 扩展作为概念证明。

所以,问题是 - 是否有一个案例可以创建一个旨在作为 PHP 扩展运行的 Haskell Web 框架,并将所有请求/响应/cookie 等处理留给 PHP ?

创建这样一个框架会涉及哪些设计决策?现在,我唯一能想到的就是它可能会暴露一个 XML/JSON API 可供 PHP 页面使用 GET 和 SET 函数调用访问。

【问题讨论】:

  • 专门针对 PHP,我对此表示怀疑,只是基于文化。但可能有一些中间件最终会与 php 一起工作。
  • 仅在 Happstack 或 Snap 服务器之上使用基本 Web 方法的学习曲线是最小的。复杂性仅来自 snap 或 yesod 提供的大型站点的各种脚手架以及各种持久性方法和自以为是的模板系统。如果您忽略这些东西(使用 yesod 并不那么容易,但使用 happstack 或 snap 甚至只是 fastcgi 非常简单),那么 php 真的没有任何优势。
  • @sclv:嗯? Yesod有什么难的?我制作了一些玩具应用程序来尝试一下,即使不知道我在做什么,它似乎也很容易上手。也感觉它没有比 Rails 更多的充满黑魔法的黑匣子。诚然,我并没有走得太远,也没有做太多的坚持,所以也许在某些时候它会变得更棘手?更好的文档会更好,但我认为这是一项正在进行的工作。
  • @camcann -- 我同意 yesod 并不比 rails 更神奇。但大卫布莱恩也不是。我不这么认为,例如键入安全路径和小村庄等非常困难。它们只是与人们习惯的不同。因此,“最小”站点的前期工作涉及一定的学习曲线,您只会看到更大站点的回报。但这不是 Haskell 的问题——Python 或其他任何框架中的框架也是如此。前一周我查看了 pylons 文档,发现它完全难以理解。
  • @sclv:我想是的。在我看来,Yesod 中的大多数困难的东西都可以在没有太多理解的情况下广泛使用,很大程度上推迟了学习曲线。显然,总的来说,我对 Haskell 很满意,并且 Web 开发支付了我的账单,但我仍然不知道 Yesod 的内部是如何工作的。然而,仅仅通过粗略地模仿我在别处看到的例子,我在小型网站上已经走得很远了。

标签: php haskell web-frameworks


【解决方案1】:

我想不出一个有意义的用例。如果您想要其他东西来处理 HTTP 请求/响应,最好直接写入 Apache API。

引入 PHP 为您提供了参数解析和 cookie 处理,但也引入了许多其他愚蠢的东西。不仅许多常见做法非常不安全或不安全,而且您仅限于内容生成——如果您想根据 URL 分派到代码的其他部分,您必须自己编写所有内容。许多成熟的 PHP 程序最终只有一个“启动”PHP 脚本。如果你想对上传的文件做任何有趣的事情,你也会遇到问题,因为 PHP 以次优方式处理它。

理论上,您可以在 Haskell 扩展中做一些处理器密集型的事情,但在这种情况下,您不妨只为 PHP 编写一个 C 扩展。无论如何,PHP 调用不应该存在很长时间。

您似乎将自己限制在 PHP 的 Web 应用程序脑损伤模型中,以获取参数和标头解析的微不足道的好处。

为 Apache API 编写 Haskell 接口可能是一种解放。您可以依赖经过实战考验的 Web 服务器,还可以连接到 Apache 请求周期的每个阶段。 Apache 不时分叉和杀死孩子的方式可能是处理 Haskell 空间泄漏的一种方式,尽管它是一种大锤方法。

【讨论】:

  • 除此之外,如果您使用 FCGI,您可以轻松地为 nginx 或 LigHttpd 制作一个模块。当您需要部署高负载应用程序并且不需要 Apache 提供的所有重载功能时,两者都是更好的选择。
猜你喜欢
  • 2012-08-14
  • 2020-01-01
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2014-07-30
相关资源
最近更新 更多