Tieme在他出色的答案上付出了很多努力,但我认为OP问题的核心是这些技术与PHP的关系,而不是每种技术的工作原理。
PHP是Web开发中最常用的语言,除了明显的客户端HTML,CSS和Javascript。然而,PHP在实时应用程序方面有2个主要问题:
- PHP最初是一个非常基本的CGI。PHP从早期阶段开始就已经取得了很大的进步,但它是以小步的方式发生的。PHP在成为今天可嵌入且灵活的C库时已经拥有数百万用户,其中大多数用户都依赖于其早期的执行模型,因此它还没有在内部尝试摆脱CGI模型。甚至命令行界面也会调用PHP库(在Linux上,在Windows上等),就好像它仍然是处理GET / POST请求的CGI一样。它仍然执行代码,就好像它只需要构建一个“页面”,然后结束它的生命周期。因此,它对多线程或事件驱动编程(在PHP用户空间内)的支持很少,这使得它目前对于实时,多用户应用程序是不切实际的。
libphp5.so
php5ts.dll
请注意,PHP确实有扩展来在PHP用户空间中提供事件循环(如)和线程(如),但是非常非常少的应用程序使用这些。libevent
pthreads
- PHP在垃圾回收方面仍然存在重大问题。尽管这些问题一直在不断改进(可能是如上所述结束生命周期的最大一步),但即使是创建长时间运行的PHP应用程序的最佳尝试也需要定期重新启动。这也使得它对于实时应用程序不切实际。
PHP 7也将是解决这些问题的一大步,并且作为实时应用程序的平台似乎非常有前途。