2013-03-05 100 views
3

我开始考虑将websockets作为解决方案,以取代正在试运行的新版本PHP应用程序中的长轮询。Websockets&PHP

我有几个问题,我不知道人们能否帮助我。

  1. 一个Nodejs服务器可以调用PHP,如果它确实不会像刚刚通过Apache在连接方面遭受同样的缺点?我们都知道nodejs是非阻塞的,Apache等不是,但是如果Nodejs只是在它自己的过程中调用PHP服务器,那么这不会以类似的方式实现吗?
  2. PHP和websockets是否匹配?
  3. 除了socketio之外,还有什么好的js库,它显然只能和Nodejs一起使用?
  4. 有没有人发现一个很好的教程,它使用websockets和PHP后端也许使用像棘轮PHP库这可能会帮助我的方式吗?

想法将不胜感激。

+1

Ratchet PHP很干净。我也正在[我自己的实现(包括演示)](https://github.com/PeeHaa/WebSocketDemo)。 – PeeHaa 2013-03-05 09:47:20

+0

@PeeHaa不错的演示 – Baba 2013-03-05 11:01:54

+0

可能是有用的,包括演示应用程序,http://www.techzonemind。com/php-websocket-library-two-way-real-time-communication/ – 2014-05-07 15:49:14

回答

0
  1. 如果你经过apache,它会遇到同样的瓶颈。这可以通过使用不同的Web服务器来解决,如lighthttpdnginx。根本不需要节点。
  2. PHP没有像样的共享内存使WebSockets无用的最大优点。它应该是体面足够,如果你不希望互动用户之间,但即使如此,我将不得不皱眉了PHP的使用。 PHP很适合很多事情,但实时通信不是其中之一。
  3. 你可能想看看https://github.com/einaros/ws
  4. PHP不是一个好的后端。与执行模型,任何不运行和忘记在自己的沙箱,如节点.NETC/C++的Java是精彩的比赛。 PHP适用于短期运行的执行,比如实际的网站甚至是web服务 - 但不是实时连接。
+0

我认为总有一件事情是,如果前端通过PHP提供,那么Nodejs支持的websocket如何与现有代码库交互它被安置在其他地方? – David 2013-03-05 10:07:56

+0

您可以将Web服务器配置为使用WebSocket路由的反向代理并将其转发给节点。节点不能使用PHP代码,但可以调用用PHP编写的服务,或者直接访问持久存储,而不是通过PHP。 – 2013-03-05 10:11:37

+3

PHP适用于实时通信,长时间运行的进程等等。仅仅因为你没有完成它们并不意味着语言不适合它。 – chugadie 2015-03-21 12:48:11

1

请原谅我解释你的问题。

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

调用一次运行的PHP脚本与调用网页具有相同的一般缺点,除了要删除额外的处理层。 Apache或任何Web服务器本身就是一个如此薄的一层,虽然你会节省一些时间,但节省将是微不足道的。

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

2:PHP和WebSockets是否匹配?

传统的PHP脚本通常意在每次请求运行一次。绝大多数PHP开发人员不熟悉事件驱动的开发,而PHP本身还不支持异步处理。

PHP是一种快速,成熟的脚本语言,只是速度越来越快,即使所有它的许多缺点和不足之处。 (有人说,它的弱类型是一个缺点,有人说它的缺点是它的类型不够弱)。

也就是说,任何语言实现WebSockets所需的最低限度是打开建立一个基本的TCP端口并监听请求。对于PHP,它是作为C套接字库的一个简单包装实现的,并且还有其他扩展和框架可用,这些扩展和框架也可以改变使用PHP在TCP套接字中工作的感觉。

PHP的垃圾收集器也日趋成熟。内存泄漏来自于对内存空间的严重忽视(我在看你,Zend Framework),或者来自开发人员故意破坏垃圾收集系统的人,他们认为他们很聪明或想证明它是多么容易击败GC。 (扰流板:这很容易在每一种语言,如果你知道详情)

这是很可能的,很容易建立一个守护进程(长时间运行的后台进程)在PHP。甚至有可能使它正常运行,以便正常重启并将其连接关闭到相同脚本的新版本,甚至可以在运行不同版本PHP的同一台服务器上使用同一脚本,尽管这仅仅是一个范围微小一点。

至于是否匹配,完全由开发商决定。您是否愿意,能够并乐意使用PHP来编写WebSockets服务器,或者使用其中一台现有的服务器?是?然后你是与PHP和WebSockets很好的匹配。

3:JS库的的WebSockets

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

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()

有在链路更好的信息上面,虽然如此,遵循它,只要存在链接。