繁体   English   中英

Websockets和PHP

[英]Websockets & PHP

我开始考虑将websockets作为替代我正在调试的新构建PHP应用程序中的长时间轮询的解决方案。

我有几个问题,我想知道是否有人可以帮助我。

  1. Nodejs服务器可以调用PHP吗?如果不这样做,与连接Apache一样,它也遭受同样的缺点吗? 我们都知道nodejs是非阻塞的,而Apache等不是,但是如果Nodejs只是在它自己的过程中调用PHP服务器,那不会以类似的方式造成瓶颈吗?
  2. PHP和websockets很好匹配吗?
  3. 除了socketio以外,还有什么不错的js库,这些库显然仅适用于Node.js吗?
  4. 有没有人找到使用websockets和PHP后端的优秀教程,也许使用诸如Ratchet PHP库之类的东西来帮助我上路呢?

思想将不胜感激。

请原谅我对您问题的解释。

1: Node.js可以调用PHP,并且不会有与Apache相同的缺点吗?

调用一次运行的PHP脚本将具有与调用网页相同的一般缺点,只是要删除额外的处理层。 Apache或任何Web服务器本身都是这么薄的一层,虽然您可以节省一些时间,但是节省的资金微不足道。

如果出于某种原因,PHP比Node.js在收集客户端数据方面更有效,那么将PHP包含在应用程序中可能是明智的。

2: PHP和WebSockets是否很好匹配?

传统的PHP脚本通常旨在每个请求运行一次。 绝大多数PHP开发人员都不熟悉事件驱动的开发,并且PHP本身(尚未)不支持异步处理。

PHP是一种快速,成熟的脚本语言,尽管有很多缺点和缺点,但它只会变得越来越快。 (有人说它的弱类型是一个缺点。其他人说它的类型不够弱是一个缺点。)

也就是说,任何语言实现WebSocket所需的最低要求是能够打开基本TCP端口并侦听请求。 对于PHP,它是作为C套接字库的一个薄包装而实现的,并且还有其他可用的扩展和框架,它们也可以改变使用PHP在TCP套接字中工作的感觉。

PHP的垃圾收集器也已经成熟。 内存泄漏要么是由于对内存空间的完全无视(我在看您,Zend Framework),要么是因为认为自己很聪明或想要证明击败它很容易的开发人员故意破坏垃圾收集系统。 GC。 (剧透:如果您知道详细信息,那么每种语言都很容易!)

在PHP中设置守护程序(长时间运行的后台进程)非常有可能并且非常容易。 甚至有可能使其行为良好,以正常重启并将其连接移交给同一脚本的新版本,甚至是运行不同PHP版本的同一服务器上的同一脚本,尽管这超出了范围。一点点。

至于是否合适, 完全取决于开发人员 您是否愿意,有能力并且很高兴与PHP一起编写WebSockets服务器或使用现有服务器之一? 是? 然后, 非常适合PHP和WebSockets。

3: WebSockets的JS库

老实说,我还没有研究过它们。

4: 使用PHP和Websockets的教程

我个人很喜欢本教程: http : //www.phpbuilder.com/articles/application-architecture/optimization/creating-real-time-applications-with-php-and-websockets.html

尽管我拥有很好的权威,但是该教程的详细信息很快将针对该特定WebSockets服务器而过时。 (不过,该服务器仍将有一个主动维护的旧版分支。)

如果链接腐烂:

使用PHP-Websockets服务器(将在Github上提供,将很快归位),扩展基本WebSocketServer抽象类并实现抽象方法process()connected()closed()

但是,在上面的链接上有很多更好的信息,因此只要存在该链接,请遵循它。

  1. 如果您使用apache,它将遇到相同的瓶颈。 可以通过使用其他Web服务器(例如lighthttpdnginx)来补救。 您甚至根本不需要节点。
  2. PHP没有像样的共享内存,这使WebSockets irrelevent的最大优势。 如果您不希望用户之间进行交互 ,它应该足够体面 ,但是即使那样,我也不得不对PHP的使用不满意。 PHP在很多方面都很有用,但是实时通信不是其中之一。
  3. 您可能想看看https://github.com/einaros/ws
  4. PHP不是一个好的后端。 任何具有执行模型的应用程序,例如Node.NETC / C ++Java,都可以在其自己的沙箱中轻松运行。 PHP适用于短期运行的执行,例如实际的网站甚至Web服务,但不适用于实时连接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM