Azure 上的 PHP 应用程序作为“控制台应用程序”


PHP application on Azure as "Console App"

有没有办法在Windows Azure上轻松地从命令行运行PHP应用程序?

我有一个标准的Web应用程序(在Azure上),我想使用WebSockets进行通信。所以我需要一个WebSocket服务器一直在Azure上运行。

我使用Wrench项目,我需要"一直"运行它来监听某个端口并处理来自JavaScript发送的WebSocket的消息。

再说一遍 - 在 Azure 上运行"持久"PHP 应用程序有多容易?

提前谢谢你。

Sandrino的回答很好,但我更喜欢ProgramEntryPoint做这种事情。后台任务的问题在于(除非你自己构建了一些东西)没有任何内容在监视它。使用ProgramEntryPoint,Windows Azure将监视该过程,如果由于任何原因退出,则角色实例将重新启动。

编辑

Sandrino指出,PHP程序并不是唯一运行的东西。(还有一个网站。在这种情况下,我建议在WebRole.csRun()启动php.exe。 Process.Start它,然后对其进行.WaitForExit()。这样,如果进程退出,角色本身将从 Run() 退出,从而导致角色实例重新启动。有关示例,请参阅 http://blog.smarx.com/posts/using-other-web-servers-on-windows-azure。

为了将PHP脚本作为命令行应用程序运行,您应该使用PHP CLI(命令行界面)。

php.exe -f "yourWebSocketServce.php" -- -arg1 -arg2 -arg3

现在,为了在Windows Azure中运行它,你需要定义一个运行这个命令的启动任务。您将看到默认任务类型很简单,这意味着您的角色启动将阻止,直到任务完成。但是在您的情况下,在PHP中运行WebSocket将是一个阻塞过程,这就是为什么您应该将类型更改为后台(这将确保实例在WebSocket服务器运行时继续启动)。

这是Azure上的WebSockets服务。 - 现场 XSockets.NET

看看 http://live.xsockets.net,这是一种简单的入门方法,但这取决于您将在"服务器端"做什么。我提到的这项服务可以用作"消息"调度程序,以在更改等情况下对"客户端"进行 ntify。嗯,换句话说,这是一种提升"常规"网络应用程序的方法。