我应该如何实现服务器推送,以便使用数据库更新更新浏览器?

时间:2013-04-07 20:35:40

标签: multithreading node.js comet long-polling server-push

我正在阅读将服务器推送到客户端的各种方式(broswer)。我想了解这些方法中的最佳方法。

  1. 长轮询 - 要避免因为它在服务器端占用更长的资源。
  2. 使用回调节点JS异步委派.--缺点是它是单线程的。
  3. 在java中编写回调,使用线程在后台执行任务,然后使用回调将其推送到服务器,如node.js。
  4. 这里的优点是我们将有多个线程并行运行并有效利用CPU。

    有人能建议最好的实施方式吗?任何其他方式也表示赞赏。

1 个答案:

答案 0 :(得分:0)

你似乎误解了一些事情。您无法将长轮询与服务器端技术进行比较。

长轮询意味着客户端(即浏览器)向服务器发出AJAX请求。然后,服务器将该请求保持活动状态,直到有通知为止。然后它响应该请求,客户端在收到更新后立即使用新的AJAX请求调用服务器。

您可以在服务器端选择要处理的任何技术。人们在脑海中制作了NodeJS,因此我建议使用它。但是,使用最适合你的东西。

现在另一个误解是线程提高了性能,因此它们比单线程应用程序更好。实际情况恰恰相反:使用线程性能会变差(这里我假设我们正在使用一个核心CPU)。线程会增加响应性,但不会提高性能。然而,有一个问题(使用单线程应用程序),如果您尝试做的事情是CPU密集型,那么它将阻止您的服务器。但是,如果您正在谈论简单的通知,那么这根本不是问题(您不需要CPU功率)。侧面注意:您可以像拥有内核一样激活NodeJS的多个实例以利用多个内核(但是,您需要更复杂的代码)。

此外,您应该考虑使用WebSockets(从而在服务器端实现简单的TCP服务器)。长轮询是低效的,大多数现代浏览器都支持WebSockets(特别是IE10 +,因为它始终是IE的问题)。

总结:在服务器端使用您最熟悉的技术。