我已经尝试阅读一些文章,但是我对这些概念还不太清楚。
有人想向我解释一下这些技术是什么吗?
- 长轮询
- 服务器发送的事件
- 网络套接字
- 彗星
我每次遇到的一件事是,服务器保持打开连接并将数据推送到客户端。连接如何保持打开状态,客户端如何获取推送的数据?(客户端如何使用数据,也许一些代码可能会有所帮助?)
现在,我应该为实时应用程序使用哪一个。我已经听到很多关于websockets的信息(使用socket.io [一个node.js库]),但是为什么不使用PHP?
我已经尝试阅读一些文章,但是我对这些概念还不太清楚。
有人想向我解释一下这些技术是什么吗?
我每次遇到的一件事是,服务器保持打开连接并将数据推送到客户端。连接如何保持打开状态,客户端如何获取推送的数据?(客户端如何使用数据,也许一些代码可能会有所帮助?)
现在,我应该为实时应用程序使用哪一个。我已经听到很多关于websockets的信息(使用socket.io [一个node.js库]),但是为什么不使用PHP?
Answers:
在下面的示例中,客户端是浏览器,服务器是托管网站的网络服务器。
在理解这些技术之前,您必须首先了解经典的 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已经拥有数百万用户,其中大多数人都依赖于它的早期执行模型,因此它还没有做出坚定的尝试来逃避PHP。内部cgi模型。甚至命令行界面也会调用PHP库(在Linux上为libphp5.so,在Windows上为php5ts.dll等),就好像它还是处理GET / POST请求的cgi一样。它仍然执行代码,就好像只需要构建一个“页面”,然后结束其生命周期一样。结果,它几乎不支持多线程或事件驱动的编程(在PHP用户空间内),从而使其目前对于实时的多用户应用程序不可行。
请注意,PHP确实具有扩展,可以在PHP用户空间中提供事件循环(例如libevent)和线程(例如pthreads),但是很少有应用程序使用它们。
2)PHP在垃圾回收方面仍然存在重大问题。尽管这些问题一直在不断改善(如上所述,这可能是结束生命周期的最重要的一步),但即使是创建长期运行的PHP应用程序的最佳尝试,也需要定期重新启动。这也使其对于实时应用不切实际。
PHP 7也将是解决这些问题的重要一步,并且作为用于实时应用程序的平台似乎很有希望。
您可以轻松地将Web应用程序中的Node.JS仅用于实时通信。关于WebSocket,Node.JS确实非常强大。因此,“通过Node.js进行PHP通知”将是一个很好的概念。
请参见以下示例: 使用PHP和Node.js创建实时聊天应用程序