Socket.io用于实时应用程序

所以我有几个月前build立的另一个项目。 它目前使用jQuery和Ajax,每30秒调用一次php脚本。 php脚本查询mysql并返回结果显示。 在这个应用程序中,这个人有能力添加/编辑/从数据库中删除logging,当他们从数据库的结果列表需要更新他们看到的列表。 到目前为止,这似乎是工作,但是往下看,数据库将变得更大,并且需要实时更多,这意味着不仅每30秒刷新一次,而且尽可能瞬间更新。

socket.io会是这个答案吗? 我会简单地使用socket.io与nodejs来创build一个服务器,并发出事件来查询我的分贝,并返回结果显示? 那么在客户端就有一个像每秒一样调用服务器套接字脚本的函数? 这是否是使用socket.io的正确途径? 如果这样的话,如果我在服务器资源方面每秒都运行一次,那么这个过程会有一个问题吗?

socket.io会是这个答案吗?

我的答案是,socket.io / node.js更好地处理实时应用程序,然后在当前forms的PHP。

那么在客户端就有一个像每秒一样调用服务器套接字脚本的函数?

在node.js中,您不应该轮询询问信息,而是应该将推送的信息(使用redis pubsub或node.js事件)发送给您。 我build议你看看我在stackoverflow.com上的一个pubsub片断来解释我自己一点点。 为了使代码工作,你将需要安装socket.io 0.6.x(0.6.18),因为最新的socket.io 0.7.x有一个稍微不同的API。

如果这样的话,如果我在服务器资源方面每秒都运行一次,那么这个过程会有一个问题吗?

就像我之前说的使用pubsub语义。 你可以例如使用:

  • redis pubsub
  • 事件

socket.io会是这个答案吗? 我会简单地使用socket.io与nodejs来创build一个服务器,并发出事件来查询我的分贝,并返回结果显示? 那么在客户端就有一个像每秒一样调用服务器套接字脚本的函数? 这是否是使用socket.io的正确途径? 如果这样的话,如果我在服务器资源方面每秒都运行一次,那么这个过程会有一个问题吗?

如果你想实时的东西。 结构可能不同。

首先你需要一个帮助你在浏览器和服务器之间进行通信的中间人。

解决scheme1:请求每30秒实时获取(与您当前的方法相同)

解决scheme2:httpstream媒体。 一旦请求到服务器。 服务器可以继续向浏览器发送响应。 由于许多安全浏览器问题,socket.io已经诞生了。 Socket.io提供了许多方法stream,htmlfilestream,xhr请求,闪存…

其次,您需要服务器来接受连接并进行长时间轮询服务。 感谢上帝 ! socket.io为你做了这部分。

第三,最重要的人! 这是数据。

解决scheme1:每个请求/触发器调用db或nosql数据库(SQLserver,mysql,Mongodb)。 相信我 ! 你的分贝很快就要死了。

解决scheme2:消息传递服务。 Redis pub / sub,rabbitQ等服务。 它只是使用订阅和发布队列中的消息。 它使用特定的协议来发布消息,而不是像db一样存储消息。 所以它可以发送消息> 100 k请求/秒! 超快。哇! 它使用这个服务可以解决实时解决scheme吗? 不幸的是,有点难。 为什么? 因为使用这种服务你不能存储数据,SQL查询来定制你的数据需要。

解决scheme3:内存过程.Redis,memcached。 记忆超快! 您可以将最终的显示结果存储在内存中。 内存可以达到> 100 k请求/秒。

结论。 构build一个真正的实时Web应用程序,如Facebook或高音。 我们需要应用以上所有的解决scheme+一些作弊。 例如,Facebook的朋友通知。 当你收到朋友新闻更新时,它使用消息服务向所有朋友发布警报(最多5000人)。因为繁重的发布会降低消息的性能。 之后caching(Memcached)的通知消息,以减less调用分贝(MySQL)。 我们如何能得到超过100万人的团体信息? 当然,我们会发布给所有超过100万人。 但是我们要求100万人打电话给我们最新的群组消息,这些消息存储在内存中。

  • 提醒:扩展您的服务器对于实现实时目标非常重要。 祝你好运 !