我有一个相当匆忙构建的Web应用程序,可以简单地向少数几个人演示我们的想法。它需要更新的信息,所以我使用jQuery和PHP快速而肮脏的短轮询技术将我们的演示集合在一起。性能并不重要,因为在任何给定时间只有少数人访问此演示。
该应用程序基本上是一个实时队列,从Android应用程序中提供项目。现在我让android将POST数据发送到API,该API将数据添加到数据库中。然后,我使用短轮询来保持队列在事物的网络端更新(不太理想,我知道)。
现在演示结束并且有很大的兴趣,我的任务是这个应用程序必须能够扩展到我估计每天连接的大约2500个客户(500个商店w / up)在接下来的一年左右的时间内连续5个浏览器连接。
为了实现这一目标,我一直在阅读使应用程序实时化的各种方法,以及使用像Comet这样的长轮询技术。我的脑袋现在有点旋转,有各种各样的选择。我看过像Pusher这样的服务,但我们真的想尽量减少每月的费用,所以这真的只是最后的选择。 Node.js似乎是流行的选项,但这需要我重写我的整个应用程序,不是吗?
即使我确实使用了类似Node.js的东西,但我对如何处理来自android应用程序的传入POST数据并让它更新数据库并将其发送到客户端浏览器感到很遗憾。
实时队列只是Web应用程序的一部分,其余部分可以在不需要任何实时功能的情况下完成。如果我使用node.js,我可以只在node.js中编写队列,并使用更传统的LAMP堆栈运行网站的其余部分吗?
我确实拥有控制商店中使用的浏览器(Chrome)的优势,因此我不需要担心传统的浏览器支持。
任何可以引导我朝正确方向发展的建议都会非常感激。似乎有很多选择,但我不确定哪一个最适合我的情况。
答案 0 :(得分:2)
你说得对,由于Javascript的异步特性,node.js更适合于反应式API并执行基于事件的过程。
然而,并不是说您无法在PHP中实现相同的效果。虽然我是node.js的粉丝和倡导者,但听起来你已经用你选择的语言完成了相当多的工作,我觉得如果有办法用PHP获得这个功能你会去的。将您的应用程序跨多个语言/框架拆分为一个功能听起来不是最好的想法。
您的主要关注点似乎是民意调查。具体来说:2500名用户同时进行长轮询。最明显的出路是你采用HTML5 WebSockets。存在用于在PHP中实现此目的的库,例如Ratchet。每个用户都将使用websocket与您的中央服务器保持连接。通过此连接,每个客户端都可以向服务器发送数据和从服务器接收数据。服务器作为此链中的中间步骤,可以在将数据从一个客户端传递到另一个客户端时对数据执行任何操作,包括存储数据。
您可能想知道这比长轮询更具可扩展性。关于巨大性能改进right here的文章很棒。它归结为只在实际发生事件时发送数据的websockets,而不是连续的"民意调查。"