我试着读了一些文章,但是我还不是很清楚其中的概念。
有人愿意给我解释一下这些技术是什么吗:
我每次遇到的一件事是,服务器保持连接打开,并将数据推送到客户机。连接如何保持打开,客户端如何获取推送的数据?(客户机如何使用这些数据,也许一些代码会有所帮助?)
现在,我应该使用它们中的哪一个作为实时应用程序。我已经听说了很多关于websockets(带有socket.io[一个node.js库])的事情,但为什么不是PHP呢?
在下面的示例中,客户端是浏览器,服务器是承载网站的Web服务器。
在了解这些技术之前,您得先了解经典的HTTP web流量。
>
当有新信息可用时,服务器向客户端发送事件。
>
服务器和客户端现在可以在任何一方有新数据可用时相互发送消息。
Comet是HTML5之前的一个技术集合,它使用流和长轮询来实现实时应用。在维基百科或本文上阅读更多信息。
现在,我应该使用其中的哪一个实时应用程序(我需要编码)。我已经听说了很多关于websockets(带有socket.io[一个node.js库])的事情,但为什么不是PHP呢?
您可以将PHP与WebSockets一起使用,请查看Ratchet。
Tieme在他出色的回答中投入了大量的精力,但我认为OPs问题的核心是这些技术如何与PHP相关,而不是每种技术如何工作。
除了显而易见的客户端html,css和JavaScript之外,PHP是web开发中使用最多的语言。然而,当涉及到实时应用程序时,PHP有两个主要问题:
1)PHP最初是一个非常基本的CGI。PHP自其早期阶段以来已经取得了很大的进展,但进展缓慢。当PHP成为今天这样一个可嵌入且灵活的C库时,它已经拥有了数百万用户,其中大多数用户依赖于它早期的执行模型,因此它还没有在内部尝试摆脱cgi模型。即使是命令行接口也会调用PHP库(linux上的libphp5.so,windows上的php5ts.dll等),就好像它仍然是一个处理GET/POST请求的cgi一样。它仍然执行代码,就好像它只需要构建一个“页面”,然后结束它的生命周期。因此,它对多线程或事件驱动编程的支持非常少(在PHP用户空间内),这使得它目前对于实时,多用户应用程序来说是不实用的。
注意,PHP确实有扩展,可以在PHP用户空间中提供事件循环(如libevent)和线程(如pthreads),但是使用这些的应用程序非常非常少。
2)PHP在垃圾收集方面仍然存在重大问题。尽管这些问题一直在不断改善(正如上面所描述的,这可能是结束生命周期的最大步骤),但即使是创建长时间运行的PHP应用程序的最好尝试也需要定期重启。这也使得它对于实时应用程序来说是不实际的。
PHP7也将是解决这些问题的重要一步,作为实时应用程序的平台似乎非常有前途。
我试着记下这些,并从Java的角度收集和撰写例子。
适用于Java开发人员的HTTP
反向Ajax-旧样式
服务器端异步处理
反向Ajax-新样式
服务器发送的事件
把它放在这里,为任何Java开发人员谁正在寻找相同的主题。