使用erlang实现Comet并将其用于PHP应用程序

时间:2009-12-26 15:09:10

标签: php python erlang comet twisted

我正在构建一个PHP Web应用程序,我已经达到了建立Comet服务器的程度,因为每当有新数据可用时我都需要更新我的用户(非常像FB)。我花了很多时间在网上搜索,我得出结论,构建Comet服务器的最佳方法是使用erlang构建它。另外我发现apache-php并不是一个很好的组合,因为每个请求的进程问题。所以,我必须为comet应用程序构建一个轻量级的http服务器。

我在erlang世界中完全是新手,但我正在考虑在erlang中实现Comet服务器并使其作为仅用于更新客户端的接口。对于我的其他Web应用程序函数,我仍然希望继续使用PHP实现它们。因此,将更新客户端的请求定向到erlang服务器并将其他请求定向到apache-php服务器。

看起来非常复杂。我需要知道,为了构建Comet服务器,学习erlang的最佳方法是什么,以及如何将两种语言(erlang和php)结合起来,就像我有新信息一样。为了推送到客户端,我需要为Comet提供新的更改,然后将信息推送给用户。那么我如何从php和erlang中受益并使它们协同工作。

很抱歉这个很长的解释,但我真的需要你的帮助,以及你可以给我学习和实现我想要的任何指导。非常感谢。

编辑: 我应该考虑学习Python和Twisted来实现我想要的吗?

7 个答案:

答案 0 :(得分:3)

使用Erlang绝对可以做到这一点。一种可能性是使用长轮询,你可以使用mochiweb。 http://code.google.com/p/mochiweb/

另一个想法是使用套接字。在合理数量的浏览器支持Web套接字之前,您必须使用闪存“桥”来创建TCP连接,并使用javascript与服务器进行通信。看一下Web socket JS:http://github.com/gimite/web-socket-js

完成此设置后,您可以使用以下内容在Erlang进程和PHP之间进行通信:http://www.math-hat.com/~zukerman/projects/php-erlang/

然后再说一次,如果你还是Erlang的新手,也许从长远来看,你可以节省Python和Twisted或Tornado的时间。

答案 1 :(得分:2)

你可以很快学会Erlang,你应该可以使用gen_server,gen_event等东西来自OTP。学习Erlang的最快方法应该是通过以下文档和示例:http://www.erlang.org/doc/index.html

对于PHP和Erlang之间的通信,您可以使用套接字,fsockopen()以及PHP端的其余部分和Erlang端的gen_tcp。您可以解析从PHP端通过管道发送的Erlang术语(更多信息here)。

我从未使用Erlang和PHP,但我使用Erlang和Python取得了一些成功,知道PHP应该非常简单,只是尝试保持一切干净并保持状态在Erlang端,仅使用PHP生成UI。

答案 2 :(得分:2)

对于彗星风格的应用程序来说,Apache + php确实是一项糟糕的技术。您可以使用更接近php的许多其他技术:RubyPython和Perl都应该可用。如果你真的想要,你可能也可以在php中编写某种套接字服务器,但我可能不打算让它解决问题。这并不是说Erlang不是一个好选择,而是有更多的主流替代品。

如果您不想使用主流语言,请务必查看node.js,其中包含一些非常令人印象深刻的基准测试。另外,您可能已经了解了一些javascript。

答案 3 :(得分:1)

如果您正在考虑使用Python和Twisted,您可以查看Orbited。他们有非常成熟的Comet实现。您可以使Orbited通过STOMP协议与您的PHP应用程序进行通信。

这篇文章有一个很好的教程,可以让你开始使用Orbited http://thingsilearned.com/2009/06/09/starting-out-with-comet-orbited-part-1/

要将您的应用程序与PHP集成,您需要google for PHP STOMP客户端

答案 4 :(得分:1)

另一个选择是使用Nginx及其推送模块(http://pushmodule.slact.net/

这将允许您使用PHP中的Comet而无需学习新语言。

答案 5 :(得分:1)

你应该研究Yaws。它是一个已经存在十多年的Erlang Web服务器,非常稳定,仍然处于活跃的开发和维护之中,并且支持长轮询,PHP应用程序,WebSocket等等 - 几乎所有你想要的东西。

Yaws来源位于github,其邮件列表为here

答案 6 :(得分:0)

尝试芝加哥老板框架here ...使用它你不必知道被称为OTP的东西(实际上非​​常容易,强大和战斗证明)的基本要素,因为芝加哥的设计师老板,设法很好地封装它......根据教程。

在学习OTP之后,我现在正在学习它。