我想实现一个类似股票交易所的web应用程序,其中的值会一直变化(比如说一秒钟内一次)。我可能会使用ajax彗星来完成。
由于应用程序的性质,用户会有点并发,我对性能有点担心。
以下是我的想法:
我想在Rails3中实现它,但我担心性能。有什么好的托管公司可供选择?我应该使用云吗?Ruby1.9.2中的Rails 3将比php更快(包括数据库查询)?
我可以在Play框架中制作它,它可能没有性能问题,但我想在生产中进行动态更改(如果需要),而不需要重新部署等。此外,我更喜欢rails。
我可以用PHP制作,但这需要更多的时间,更多的代码
我没有使用Rails或Play的真实生产系统的经验,所以我对性能了解不多。有人能帮忙吗?
可能值得考虑使用Faye,这是一个"用于web的简单pub/sub消息传递"的框架。
Faye同时拥有Ruby和Node.js服务器组件,以及Ruby的客户端,对于您的用例web浏览器来说至关重要(显然是通过javascript)。
有两种方法:
- 在rails应用程序中嵌入Faye服务器。漂亮而简单,移动部件更少,需要管理的流程更少,但可能不如:
- 在Node.js中运行一个单独的Faye服务器,并使用Ruby Faye客户端从rails应用程序向其推送消息。稍微复杂一点。更多运动部件。更易于管理。但是,至关重要的是,所有繁重的连接都是在Node.js中完成的,这是Node.js非常擅长的
如果是我,我会从选项1开始以保持简单,并升级到选项2,前提是我可以证明这是必要的。
在Railscast 260中,有一个关于使用Ruby中的Faye的精彩介绍。
如果不知道构建的具体情况,很难做到具体,但对于可能由许多客户端同时访问的东西,并且可能不一定需要访问Rails应用程序的完整应用程序环境,您可以考虑使用node.js+Rails之类的组合。如果我理解正确的话,一旦打开一个页面,它将通过comet/websocket保持与服务器的连接,并且该页面上的元素将频繁更新。
你可以让你的Rails应用程序(通过Redis或类似的方式)通知node.js应用程序相关的更改,然后让它将这些更改广播给任何连接的客户端。。。尽量减少node.js服务器所扮演的角色。当有人上线时,页面加载,一个彗星流(你喜欢怎么称呼它……一个套接字)被打开到真正轻量级的node.js,所有可用的内容都被推送到浏览器,然后随着Rails应用程序内事件的发生,它接收到广播更新。当有更好的工具来做这些事情时,让所有这些具有持久连接的客户端进入Rails环境似乎很愚蠢。
我并不是说不要使用Rails,我只是建议您从服务的角度来考虑您的应用程序,并使用相关工具运行这些服务;)
下面是一个使用node.js的聊天应用程序的小广播示例,只是为了给您一个想法:
http://fzysqr.com/2011/02/28/nodechat-js-using-node-js-backbone-js-socket-io-and-redis-to-make-a-real-time-chat-app/
node.js只是一个建议。。。你可以去研究替代方案,或者当然,如果你想让事情"简单",只需要从Rails中管理它,但它会更重,这似乎是你关心的:)