php彗星与栎

Posted

技术标签:

【中文标题】php彗星与栎【英文标题】:php comet with quercus 【发布时间】:2010-02-02 06:09:54 【问题描述】:

如果我用 php 编写 comet push,但通过 quercus 在 java 服务器上使用此代码,这是否会解决 apache 所具有的每个请求一个进程的问题,并且可以很好地适应大量使用我的聊天的用户?

【问题讨论】:

出于好奇,您是否探索过使用 libpurple 和 XMPP 解决方案的想法?我不确定它是否能解决 Apache 瓶颈,但我一直在考虑针对我自己的情况使用这样的解决方案,并且想知道您在几乎可以上线之前探索了什么。 我读了一些关于 libpurple 的文章。似乎用户将不得不使用他们的 hotmail 或 gmail 帐户进行聊天。我只想在我的论坛中使用他们的论坛身份聊天,所以我认为这不适合我。而且必须用c/c++来实现? 【参考方案1】:

是的,Quercus 解决了每个请求一个进程的 Apache 瓶颈。但是,您需要了解 JVM 可能存在的瓶颈。不过,在我看来,您应该使用 C/C++ 编写服务或应用程序,使用 libevent、Erlang、Google Go 之类的东西,或者只是为了可移植性而将其作为 Java servlet。

【讨论】:

请阅读我对 cletus 答案的评论。我真的必须知道这是否可行,并且服务器不会因为很多用户聊天而挂断。【参考方案2】:

嗯,Quercus 在 (J)VM 上运行,因此它可以与其他可以启动线程的代码一起运行。但是为什么你需要线程来进行聊天呢?您只需将普通 PHP 请求的超时设置为 0(无超时),然后等待有内容发送回给用户。

其他东西将响应其他人的请求(即 A 说“你好”,这会打断 B 等待某事发生)。这不需要多线程。

您也可以继续使用 Apache/PHP 并执行上述操作,然后通过 XML RPC 之类的方式连接到 Java(或其他)服务,这可能会永远等待。该服务器可以运行多个线程或做任何它需要做的事情。

【讨论】:

我读到过,如果你用 apache 实现 comet,那么如果你有 5000 个用户,apache 将创建 5000 个活动进程,这些进程会消耗大量内存和 cpu。想象一下,如果您有 100 000 个用户同时聊天,您的 Web 服务器会发生什么。然后有人说,使用java(语言和服务器)即使你有100 000个用户聊天,不发送任何内容的用户的进程将“处于睡眠状态”,只有活动进程消耗cpu和ram。如果我错了,请纠正我,如果你能为我详细说明这个概念会很有帮助。 所以我想知道,如果我在带有 quercus 的 java 服务器中使用我的 php comet 代码(我已成功实现),这会解决这个 apache 进程问题并使非活动进程进入睡眠状态吗? @noname:彗星进程是开放的连接和执行代码,与语言无关。现在你可以说 Java 字节码的开销更低了。我不能说是不是这样,或者是到什么程度。但是那些打开的连接会消耗资源,并且从根本上说在睡眠进程方面没有区别。 PHP 可以像 Java 一样进行阻塞操作和休眠。另外,你真的会有 100,000 个用户吗?为什么不针对您实际遇到的问题而不是您希望遇到的问题进行构建? 这是我读到的内容:“从我目前在这里读到的内容来看,php 并不是最好的选择,因为它是作为每个请求一个进程而不是在线程之外运行的。”在我看来,Java 以某种方式解决了这个问题。是因为java为每个请求创建一个线程吗?以及这在技术上如何帮助网络服务器?有什么文章可以让我完全理解彗星问题。我只是听说 java 服务器比 apache 好,但不太明白为什么。所以我在 glassfish 中实现了 php 代码。你认为这会解决 apache 出现的任何问题吗? @noname:进程与线程的事情是一个有效的观点。但即使每个连接一个线程也无法扩展。查看 Grizzly(一个基于 Java NIO 的 HTTP 侦听器)了解更多信息。您还可以将 PHP 用于页面,将其他东西用于聊天后端,这是我对 Quercus 的建议。

以上是关于php彗星与栎的主要内容,如果未能解决你的问题,请参考以下文章

彗星与 php 套接字服务器?

使用 php 和 jquery 的简单彗星示例

AJAX 进度条 - 轮询,彗星?

使AJAX调用等待php中的事件

共享主机的实时通知(PHP、MySQL、Yii)

php websocket 服务器会在 apache 中运行吗?