我正在阅读各种将服务器推送到客户端(浏览器)的方法。我想了解其中的最佳方法。
- 长轮询——要避免,因为它在服务器端占用资源的时间更长。
- 使用回调的 Node JS 异步委托。-- 缺点是它是单线程的。
- 在 java 中编写回调,使用线程在后台执行任务,然后像 node.js 一样使用回调将其推送到服务器。
这里的优点是我们将有多个线程并行运行并有效地利用 CPU。
任何人都可以建议最好的实施方式吗?任何其他方式也值得赞赏。
我正在阅读各种将服务器推送到客户端(浏览器)的方法。我想了解其中的最佳方法。
这里的优点是我们将有多个线程并行运行并有效地利用 CPU。
任何人都可以建议最好的实施方式吗?任何其他方式也值得赞赏。
你似乎误解了一些事情。例如,您无法将长轮询与服务器端技术进行比较。
长轮询意味着客户端(即浏览器)向服务器发出 AJAX 请求。然后服务器保持该请求处于活动状态,直到有通知。然后它响应该请求,并且客户端在收到更新后立即使用新的 AJAX 请求调用服务器。
你可以选择任何你想在服务器端处理它的技术。人们用这个来制作 NodeJS,因此我建议使用它。但是使用更适合你的东西。
现在另一个误解是线程提高了性能,因此它们比单线程应用程序更好。实际上恰恰相反:使用线程时性能会变得更差(这里我假设我们正在使用一个核心 CPU)。线程会增加响应性,但不会提高性能。但是有一个问题(对于单线程应用程序),如果您尝试做的事情是 CPU 密集型的,那么它将阻塞您的服务器。但是,如果您谈论的是简单的通知,那么这根本不是问题(您不需要 CPU 能力)。旁注:您可以触发尽可能多的 NodeJS 实例,因为您有内核来利用多个内核(不过,您将需要更复杂的代码)。
您还应该考虑使用 WebSockets(从而在服务器端实现一个简单的 TCP 服务器)。长轮询效率低下,大多数现代浏览器都支持 WebSockets(尤其是 IE10+,因为它一直是 IE 的问题)。
结论:在服务器端使用您最熟悉的技术。