Ajax vs Socket.io

the*_*azz 11 ajax websocket node.js socket.io-1.0

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

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

这个想法非常简单但是阅读方法我发现了这两种技术:

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

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


现在我已经解释了情况,我有以下问题:

  • 我不会对ajax提出太多请求吗?想象我想每分钟检查一次服务器,如果我们将应用程序扩展到100个用户,它将每分钟给我100个查询.拥有套接字在系统资源上会"更便宜"吗?

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

  • 我读到now.js可以用于此但似乎不再支持该项目,所以不确定是否使用它将是一个好主意.

  • 两种方法的缓存如何?我正在考虑为每个用户创建一个缓存文件,这将由服务器端的node.js更新.我想这可以用ajax很好用但是socket.io怎么样?

  • socket.io与许多浏览器完全兼容是不是真的?我的应用程序将更专注于移动设备,我认为这可以让我考虑选择ajax.

  • 有建议吗?

我希望这可以清除我的思想和处于相同情况的其他人:)谢谢

jfr*_*d00 16

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

websocket vs rest API用于实时数据?

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

Cordova:套接字,PushNotifications还是反复轮询服务器?

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

我不会对ajax提出太多请求吗?想象我想每分钟检查一次服务器,如果我们将应用程序扩展到100个用户,它将每分钟给我100个查询.拥有套接字在系统资源上会"更便宜"吗?

套接字在不活动时需要非常少的资源所以是的,持久的webSocket比许多无限轮询的客户端更有效.这就是发明webSockets的原因,因为它们更能解决这个特殊问题.

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

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

两种方法的缓存如何?我正在考虑为每个用户创建一个缓存文件,这将由服务器端的node.js更新.我想这可以用ajax很好用但是socket.io怎么样?

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

socket.io与许多浏览器完全兼容是不是真的?我的应用程序将更专注于移动设备,我认为这可以让我考虑选择ajax.

socket.io与所有具有webSockets的浏览器完全兼容,除了IE9及更早版本之外,它几乎是今天使用的所有东西.如果使用socket.io库,如果webSockets不存在,它将自动回退到长轮询.无论您是进行常规轮询还是webSocket,您的移动问题都可能类似,因为移动设备想要管理长时间运行的东西,但您不想停止轮询.我不认为这是避免webSockets/socket.io的原因.socket.io有一些非常好的自动重新连接逻辑,只要它失去了真正有用的连接.

在移动世界中,我认为你只是发现你不能在后台可靠地进行实时通知,而不使用可以插入设备上的本机"推送"系统的某种原生应用程序组件,因为这是唯一兼具电池效率且与电源管理完全兼容的系统.一旦网页不是前台任务或设备空闲,网页就会进行电源管理.