我曾尝试阅读一些文章,但我对这些概念还不是很清楚。
有人愿意尝试向我解释这些技术是什么:
我每次遇到的一件事是,服务器保持连接打开并将数据推送到客户端。如何保持连接打开,客户端如何获取推送数据? (客户端如何使用数据,也许某些代码可能会有帮助?)
现在,我应该将其中哪一个用于实时应用。我一直听说很多关于 websockets(有 socket.io [一个 node.js 库]),但为什么不用 PHP?
在下面的示例中,客户端是浏览器,服务器是托管网站的 Web 服务器。
在了解这些技术之前,您必须首先了解经典的 HTTP Web 流量。
当有新信息可用时,服务器会向客户端发送事件。
现在,当新数据(在任一侧)可用时,服务器和客户端可以相互发送消息。
Comet 是 HTML5 之前的一系列技术,它们使用流式传输和长轮询来实现实时应用。了解更多关于维基百科或此文章。
现在,我应该将它们中的哪一个用于实时应用程序(我需要编写代码)。我一直听说很多关于 websockets(有 socket.io [一个 node.js 库]),但为什么不用 PHP?
您可以将 PHP 与 WebSockets 一起使用,请查看Ratchet 。
Tieme 在他的优秀答案中投入了大量精力,但我认为 OP 问题的核心是这些技术与 PHP 的关系,而不是每种技术的工作原理。
除了明显的客户端 html,css 和 javascript 之外,PHP 是 Web 开发中使用最多的语言。然而,PHP 在实时应用程序方面有两个主要问题:
1)PHP 作为一个非常基本的 CGI 开始。自从早期阶段开始,PHP 已经取得了很大进展,但它只是小步骤发生的。当 PHP 成为今天的嵌入式和灵活的 C 库时,PHP 已经拥有数百万用户,其中大多数用户依赖于它早期的执行模式,所以它还没有做出明确的尝试来逃避内部的 cgi 模型。甚至命令行界面也会调用 PHP 库(linux 上的 libphp5.so,windows 上的 php5ts.dll 等),好像它仍然是一个处理 GET / POST 请求的 cgi。它仍然执行代码,好像它只需要构建一个 “页面” 然后结束它的生命周期。因此,它几乎不支持多线程或事件驱动的编程(在 PHP 用户空间内),这使得它对于实时的多用户应用程序来说当前不实用。
请注意,PHP 确实具有在 PHP 用户空间中提供事件循环(例如 libevent)和线程(例如 pthreads)的扩展,但非常非常少的应用程序使用这些。
2)PHP 仍然存在垃圾收集的重大问题。虽然这些问题一直在不断改进(可能是结束生命周期的最大步骤,如上所述),但即使是创建长期运行的 PHP 应用程序的最佳尝试也需要定期重新启动。这也使得它对于实时应用程序来说不实用。
PHP 7 将是解决这些问题的重要一步,并且作为实时应用程序的平台似乎非常有前途。
我试图记下这些,并从java 角度收集和编写示例。
将它放在任何正在研究相同主题的 java 开发人员。