【问题标题】:Creating a real time website using PHP使用 PHP 创建一个实时网站
【发布时间】:2011-08-05 13:45:55
【问题描述】:

我目前正在使用 PHP 和 Kohana 框架创建一个网站。我希望站点能够使用实时(或接近实时)数据(例如,用于聊天和实时提要)。我需要它能够扩展到成千上万的并发用户。我做了很多阅读,但仍然不知道最好的方法是什么。

有人对 StreamHub 有任何经验吗?是否可以将其与 PHP 一起使用?

我是不是在自掘坟墓,需要切换语言?我看过 node js 和 nowjs,但我厌倦了在 Express 中编写一段时间的站点(我想知道安全漏洞、代码可维护性、缺乏良好的 ORM)。我读过关于 Twisted Python 的文章,但不知道什么 web 框架可以在此基础上运行良好,我不想使用 Nevow - 也许 Django 可以很好地与 Twisted Python 一起使用?我只是希望指出正确的方向,所以我不会在 PHP 中走得太远,并意识到我无法获得我需要的近乎实时的结果。

感谢您的帮助。

【问题讨论】:

  • 语言的选择不是这里的问题。
  • @Brad 语言的选择不是问题,WebServer 的选择才是问题,而且语言似乎与服务器相关。

标签: php python node.js real-time


【解决方案1】:

我看过 node js 和 nowjs,但是 我厌倦了编写一段时间的网站 快递(我想知道安全性 漏洞,代码可维护性,缺乏 好的ORM)。

如果您可以使用 JavaScript,我个人可以保证代码的可维护性。我个人认为 JavaScript 比 PHP 更易于维护,但这可能是由于缺乏 PHP 经验。

ORM 不是问题,因为 node.js 支持基于文档的数据库。基于文档的数据库和 JSON 齐头并进,我发现 couch db 和它的 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,您不会意外调用阻塞库或使用本机阻塞库,因为 JavaScript 没有本机 IO。

【讨论】:

  • 谢谢雷诺斯。我已经安装了 node js 和 express,我现在正在玩它们。到目前为止我很喜欢这个结构,但我非常支持 MVC。我一直在研究 MongoDB 和 Mongoose 以便能够创建实际模型。关于 MVC 主题,你知道有什么好的代码示例可以实现 MVC for express 吗?
  • @smpappas 数据库模型和服务器模型之间存在很大差异。如果你想要 MVC 使用 Backbone 并表达。我还没有看到任何可靠的教程,我打算写一个。 github上有一些代码你可以阅读。还有geddy。随意阅读任何好的资源,比如 howtonode 和 node tuts
  • 感谢您的信息。由于我还是 node 新手,我正在研究 Express 和 Backbone,各种数据库选项。模型部分我不太关心,我知道可以按我的喜好来做。您是否知道任何实现 View-Controller 交互的代码示例或应用程序外壳(可能使用 express 和骨干或其他)?我只是想避免在视图中加入任何真正的逻辑——我的思维方式仍然是 PHP 式的,所以我试图弥合差距。好的示例代码一直是我学习的最佳方式。再次感谢大家的指点。
【解决方案2】:

PHP 不是用于实时更新网站的语言。 PHP 脚本在 HTML 之前首先加载(并且 HTML 调用 javascript 文件),因此 PHP 无法为您更新您的页面。但是,当与 AJAX 一起使用时(例如,使用 jQuery 函数调用 PHP 文件以实时更新您的页面),您可以以这种方式使用 PHP。

使用 jQuery 和 AJAX(全是 javascript),您可以在不重新加载页面的情况下更新页面。我看过诸如 this one 之类的网站,它们演示了如何使用 jQuery 进行聊天。

【讨论】:

  • 我相信像 facebook 聊天这样的东西实际上更新了聊天窗口而不使用 AJAX,而是使用 Comet en.wikipedia.org/wiki/Comet_%28programming%29
  • @AdamPointer comet 是 ajax 的变种。
  • 这很有趣。感谢您的阅读!我在这方面是正确的。然而,我的主要观点是 PHP 不应该用于 smpappas 所询问的内容。
  • @Raynos - 确实是这样,很遗憾现在无法编辑我的评论,但对于你们所有的书呆子来说 - “在不使用传统 AJAX 技术的情况下更新聊天窗口”
  • 链接已失效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多