使用PHP创建实时网站

3 投票
2 回答
2089 浏览
提问于 2025-04-16 15:44

我现在正在用PHP和Kohana框架创建一个网站。我希望这个网站能够使用实时(或者接近实时)数据,比如聊天和实时信息流。我需要它能够支持成千上万的用户同时在线。我看了很多资料,但还是不知道最好的方法是什么。

有没有人对StreamHub有经验?可以用PHP来实现吗?

我是不是在挖坑自己,需要换语言?我看过node js和nowjs,但对用Express编写整个网站有点担心(我在想安全问题、代码维护性,还有缺乏好的ORM)。我也了解过Twisted Python,但不知道用什么网络框架比较合适,而且我不太想用Nevow——也许Django可以和Twisted Python搭配得很好?我只是想找到一个正确的方向,这样我就不会在PHP上走得太远,结果发现无法实现我需要的接近实时的效果。

谢谢大家的帮助。

2 个回答

0

PHP并不是你用来实时更新网站的合适语言。因为PHP脚本在HTML之前加载,而HTML又会调用JavaScript文件,所以PHP无法直接为你更新页面。不过,如果你结合使用AJAX(比如用jQuery的某个功能来调用PHP文件实时更新页面),那就可以这样使用PHP了。

通过使用jQuery和AJAX(这些都是JavaScript),你可以在不重新加载页面的情况下,做很多更新的操作。我见过一些网站,比如这个,展示了如何用jQuery制作聊天功能。

2

我看过 Node.js 和 Now.js,但我对用 Express 编写整个网站有点担心(我在想安全漏洞、代码维护性,以及缺乏好的 ORM)。

如果你会 JavaScript,我可以保证代码的维护性。我个人觉得 JavaScript 比 PHP 更容易维护,但这可能是因为我对 PHP 的经验不多。

关于 ORM 的问题,Node.js 更倾向于使用文档型数据库。文档型数据库和 JSON 是很搭的,我觉得 CouchDB 和它的 Map/Reduce 系统很好用,跟 JSON 结合得也很自然。

至于安全漏洞,是的,Node.js 服务器还比较年轻,可能会有一些漏洞。这是不可避免的。目前没有已知的攻击方式,我觉得它的安全性和 IIS、Apache、Nginx 差不多,直到有人发现了大问题。

我希望网站能够使用实时(或接近实时)数据(比如聊天和实时信息流)。我需要它能够支持成千上万的同时用户。

要实现这样的可扩展性,需要使用非阻塞的输入输出(IO)。这就需要像 Nginx 或 Node.js 这样的非阻塞 IO 服务器(当然,阻塞 IO 也可以,但你需要更多的硬件支持)。

我个人建议使用 Node.js 而不是 PHP,因为在 Node.js 中编写非阻塞 IO 更简单。虽然在 PHP 中也可以做到,但你需要做很多正确的设计和架构选择。我怀疑 PHP 中有没有真正的异步非阻塞框架。

Python 的 Twisted 和 Ruby 的 EventMachine 加上 Nginx 也可以工作,但我对这些没有太多经验。至少在 Node.js 中,你不会意外调用一个阻塞库或使用本地的阻塞库,因为 JavaScript 没有本地 IO。

撰写回答