2012-08-17 42 views
5

我目前正在开发一个将使用websockets进行客户端 - 服务器通信的PHP应用程序。我听说过很多次PHP不应该用于服务器应用程序,因为它缺少线程机制,内存管理(循环引用)或不方便的套接字库。带有PHP的Websocket服务器

到目前为止,一切工作都很好。我使用phpws作为websocket库和Doctrine DBAL来访问不同的数据库系统; PHP是5.3.8版本。服务器应该最多为30个客户端提供服务。然而,特别是在最近几天,我阅读了几篇文章,指出PHP对于长时间运行的应用程序无效。

现在我不知道是否应继续在PHP中使用websockets或重新构建整个serverside应用程序。我用Socket.IO尝试过Python,但我没有得到我期望的结果。

我想我有以下选择:

  • 保持一切,因为它是。
  • 使应用程序将Ajax与Socket.IO结合使用 - 例如运行一个服务器端脚本,在数据提交给服务器时调用客户端的ajax调用。

最后一点听起来很有趣,虽然它需要一些工作..会是服务器一次执行所有客户端请求的问题吗?

你会推荐什么? PHP的内存管理问题(我每次客户端发送数据到服务器时都使用gc_collect)仍然有效吗?除了显而易见的原因(没有线程,...)之外,还有其他原因不使用PHP作为服务器?

+0

所以你问你是否应该放弃你目前的工作设计?像这样的问题在这里并不真正有效,你将不得不决定自己编码。你知道哪些其他服务器端语言?发布你的python代码,如果你决定重写你的代码,有人可以帮你找到问题。 – xthexder 2012-08-17 13:36:00

回答

4

您可以尝试在服务器上另一个端口上的一个节点服务器上运行的socket.io(即如果你没有使用像goDaddy的托管计划)。

我使用它,表演真的很令人满意。 我有一个端口80上的apache服务器为我的php文件提供服务,并且我的服务器 - 客户端通信是使用在端口8080(dev)或843(prod)上运行socket.io的Node.js服务器完成的。

Node.js非常轻巧,性能卓越,但您需要将其作为服务器运行。 Nodejitsu.com是一个托管解决方案,它提供websocket协议并处于测试阶段,所以它现在仍然是免费的。请注意,您需要使用socket.io侦听端口80,这是来自他们网络的限制。

如果您希望您的网页全部在端口80上访问,那么您将需要一个反向代理,如varnish

我希望有帮助!祝你今天愉快。

+1

+1对于带有socket.io的Node.js以获得最佳性能 – 2012-08-17 17:26:08

0

除了显而易见的原因(没有线程,...) 是否有其他原因没有使用PHP作为服务器?

是的,许多套接字函数互相不兼容,它是一个地狱调试。

我想类似的东西我自己和退出沮丧信德每一个功能我认为是有意义没有做什么,我预计