【发布时间】:2015-07-30 22:14:20
【问题描述】:
我正在开发一个网络应用程序,我想知道哪种方法应该适合我的项目。
基本上,我想向用户显示的是一些从对其他服务器的请求中获取的通知。我的 node.js 应用程序获取所有信息,然后将其传播给用户,将副本保存到我的 MongoDB 中。
这个想法很简单,但是阅读了我发现这两种技术的方法:
Ajax:客户端会一直检查服务器上是否有新内容。这将通过使用 jquery ajax get 到我的服务器 API 来完成(每 30/60 秒)。
Socket.io : 客户端连接一次,然后保持永久 TCP 连接(更实时)。
现在我已经说明了情况,我有以下问题:
我不会有太多的 ajax 请求吗?想象一下,我想每分钟检查一次服务器,如果我们将应用程序扩展到 100 个用户,它每分钟会给我 100 个查询。拥有一个套接字会在系统资源上“更便宜”吗?
socket.io 是否会成为移动设备的问题?带宽和性能。服务器的响应总是 JSON 格式的信息。
我读到 now.js 可以用于此,但似乎不再支持该项目,所以不确定使用它是否是个好主意。
这两种方法的缓存如何?我正在考虑为每个用户创建一个缓存文件,这将由服务器端的 node.js 更新。我想这可以很好地与 ajax 一起使用,但是 socket.io 呢?
socket.io 是否与许多浏览器完全不兼容?我的应用会更专注于移动设备,我认为这会让我考虑选择 ajax。
任何替代建议?
我希望这可以让我和其他处于同样情况的人清醒:) 谢谢
【问题讨论】:
-
在我看来,由于您的应用程序不需要“真正的”实时,因此通过 ajax 调用进行长时间轮询就可以了。 Websocket 更适合实时性至关重要的地方。例如在线协作。
-
我个人的决策过程是:如果您的应用需要每分钟处理 100 个请求,请使用 ajax。如果它需要每秒处理 100 个请求,请使用 websockets。每当您发现自己需要每秒检查一次每个客户端时,如果可能,请使用 websockets
-
每隔 30 秒,使用 ajax 和
setInterval或setTimeout。易于推理并使您的服务器保持无状态。
标签: ajax node.js websocket socket.io-1.0