Ajax与Socket.io

我正在开发一个Web应用程序,我想知道哪种方法应该适合我的项目。

基本上我想显示给用户的是从请求到其他服务器的一些通知。 我的node.js应用程序获取所有的信息,然后传播给用户,保存到我的MongoDB副本。

这个想法很简单,但阅读有关方法,我发现这两种技术:

  1. Ajax:如果服务器上有新的内容,客户端将全部检查。 这将通过使用jquery ajax到我的服务器API(每30/60秒)完成。

  2. Socket.io:客户端连接一次,然后维持永久的TCP连接(更实时)。


现在我已经说明了情况,我有以下问题:

  • 我不会有太多的请求与Ajax? 想象一下,如果我们将应用程序扩展到100个用户,每分钟都会给服务器一个检查,那么每分钟会给我100个查询。 有一个套接字是否会在系统资源中“便宜”?

  • socket.io会成为移动设备的问题吗? 带宽和性能。 服务器的响应始终是JSON格式的信息。

  • 我读了now.js可以用于这个,但似乎该项目不再支持,所以不知道如果使用它将是一个好主意。

  • 这两种方法如何caching? 我正在考虑为每个用户创build一个caching文件,这将由服务器端的node.js更新。 我想这可以用ajax很好的工作,但是socket.io呢?

  • socket.io是否与许多浏览器不兼容? 我的应用程序将更专注于移动设备,我想这可能会让我考虑select阿贾克斯反而。

  • 有其他build议吗?

我希望这可以清除我的头脑和其他人在相同的情况:)谢谢

webSocket和Ajax之间的许多通用权衡在这里讨论:

WebSocket与其他API的实时数据?

这里讨论移动设备的一些权衡问题:

Cordova:套接字,PushNotifications或重复轮询服务器?

简而言之,如果您的数据主要是服务器驱动的,然后需要发送给客户端,并且您希望在客户端看到新数据时有相当好的延迟,那么webSockets就是一个很好的问题。 webSockets在这种情况下工作得最好,因为客户端不需要经常轮询,服务器不需要处理来自许多客户端的常规轮询请求。 相反,每个客户端只需build立一个持久的webSocket通信通道,服务器随时可以根据需要发送数据。

我不会有太多的请求与Ajax? 想象一下,如果我们将应用程序扩展到100个用户,每分钟都会给服务器一个检查,那么每分钟会给我100个查询。 有一个套接字是否会在系统资源中“便宜”?

当它们不活跃时,套接字只需要很less的资源,所以是的,一个持久的webSocket比许多无限轮询的客户端更有效率。 这就是为什么webSockets被发明出来,因为他们更好地解决这个特定的问题。

socket.io会成为移动设备的问题吗? 带宽和性能。 服务器的响应始终是JSON格式的信息。

socket.io不是带宽或性能的问题。 在后台尝试使用webSocket存在一些移动问题,因为移动设备也在尝试进行主动电源pipe理,尽pipe客户端轮询也存在类似的问题。

这两种方法如何caching? 我正在考虑为每个用户创build一个caching文件,这将由服务器端的node.js更新。 我想这可以用ajax很好的工作,但是socket.io呢?

目前还不清楚你问的是什么caching? 在webSocket实现中,服务器获取数据,然后将其发送给每个用户。 通常不需要服务器端caching。 在客户端Ajax轮询实现中,服务器必须将数据存储在某个地方,然后“等待”每个客户端请求数据。 webSocket或Ajax没有“内置”caching机制。

socket.io是否与许多浏览器不兼容? 我的应用程序将更专注于移动设备,我想这可能会让我考虑select阿贾克斯反而。

socket.io是完全兼容的所有浏览器都有webSockets,几乎所有使用今天除了IE9和以上。 如果您使用socket.io库,如果webSocket不存在,它将自动回退到长轮询。 无论是定期轮询还是webSocket,您的移动设备问题可能都会相似,因为移动设备需要pipe理长时间运行的事情,但是您不希望停止轮询。 我不认为这是一个避免webSockets / socket.io的原因。 socket.io有一些非常好的自动重新连接逻辑,只要它失去了连接,这可能是非常有用的。

在移动世界中,我认为你会发现你不能在后台可靠地进行实时通知,而无需使用某种本地应用程序组件,这些组件可以插入设备上的本地“推送”系统,这是唯一既省电又能与电源pipe理兼容的系统。 一旦网页不是前台任务或者设备空闲,网页将被pipe理。