2014-06-17 23 views
2

我有一个Web应用程序,而不是匆忙构建,只是将我们的想法演示给选定的少数人。它需要更新的信息,所以我用jQuery和PHP使用快速和肮脏的短轮询技术将我们的演示放在一起。性能并不重要,因为在任何时候只有少数人访问此演示。需要建议转换我的应用程序,以允许实时更新

该应用程序基本上是一个实时队列,从一个Android应用程序提供项目。现在我有android发送POST数据到一个API添加一条记录到数据库。然后,我使用短轮询来保持队列在网络方面的更新(不理想,我知道)。

既然演示结束并且有很大的兴趣,我的任务就是这个应用程序必须能够扩展到我估计的每天大约2500个客户端连接(500家商店w /在未来一年左右的时间内,最多可连接5台浏览器)。

为了使这成为现实,我一直在阅读使这个应用程序实时以及使用长轮询技术(如Comet)的各种方法。我的脑袋现在有了各种各样的选择。我已经看过像Pusher这样的服务,但我们真的想尽量减少每月的成本,所以这只是最后的选择。 Node.js似乎是流行的选项,但这需要我重写我的整个应用程序,不是吗?

即使我确实使用类似Node.js的东西,但我对于如何处理来自android应用程序的传入POST数据并且让它更新数据库并将其发送到客户端浏览器感到失落。

实时队列只是Web应用程序的一部分,其余部分可以在不需要任何实时功能的情况下完成。如果我使用node.js,我可以在node.js中写入队列,并使用更传统的LAMP堆栈运行网站的其余部分?

我的确有控制商店中使用哪些浏览器的优势(Chrome),所以我并不需要担心传统的浏览器支持。

真的任何意见,可以引导我在正确的方向将不胜感激。看起来似乎有很多选项,但我不确定哪一个最适合我的情况。

+1

研究使用网络套接字而不是“实时”数据的任何轮询。此外,请看看pubsub模式 - http://en.wikipedia.org/wiki/Publish%E2%80%93subscribe_pattern,因为您所描述的似乎适合模型。 –

+0

像Ratchet这样的网络套接字解决方案能够很好地适应我的工作吗? – dmarzio

+0

可能,但你必须测试才能确定。 –

回答

1

你说得对,因为Javascript的异步特性,node.js更适合被动的API并执行基于事件的过程。

但是,这并不是说你无法在PHP中实现相同的效果。虽然我是一名node.js粉丝和倡导者,但听起来您已经使用您选择的语言完成了相当多的工作,并且我感觉如果有一种方法可以使用PHP来获得此功能,那么您会付诸实践。将应用程序跨多种语言/框架拆分为一个功能听起来并不是最好的想法。

您的主要担心似乎是投票。具体而言:2500名用户同时长时间投票。最明显的出路是你采用HTML5 WebSockets。存在的库可以在PHP中实现此功能,例如Ratchet。每个用户都会使用websocket连接到中央服务器。通过这种连接,每个客户端都可以向服务器发送数据和从服务器接收数据。作为这个链中的中介步骤的服务器可以随意将数据从一个客户端传递到另一个客户端,包括存储数据。

你可能想知道这是如何比长轮询更具扩展性。关于巨大的性能改进right here有一篇很棒的文章。它归结为websockets只在事件发生时才发送数据,而不是持续的“民意调查”。

相关问题