Ajax 对比 Socket.io

Ajax vs Socket.io

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

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

中保存一份副本

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

  1. Ajax : 客户端将一直检查服务器上是否有新内容。这将通过使用 jquery ajax 获取我的服务器 API (每 30/60 秒)来完成。

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


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

我希望这可以让我和其他处于相同情况的人头脑清醒:) 谢谢

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

此处讨论了移动设备的一些权衡问题:

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

Would I not have too many requests with ajax ? imagine I want a check every minute to the server, if we scale the app to 100 users, it will give me 100 queries per minute. Would it be "cheaper" in system resources to have a socket ?

套接字在不活动时需要很少的资源,所以是的,持久的 webSocket 比许多客户端无休止地轮询更有效。这就是发明 webSockets 的原因,因为它们更擅长解决这个特定问题。

Would the socket.io be a problem for mobile devices ? bandwith and performance. The response of the server is always info in JSON format.

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

How is the caching on both methods ? I was considering to create a cache file for each user and this would be updated by the node.js in the server side. I guess this could work really well with ajax but what about socket.io ?

不清楚你问的缓存是什么?在 webSocket 实现中,服务器获取数据,然后将其发送给每个用户。通常不需要服务器端缓存。在客户端 Ajax 轮询实现中,服务器必须将数据存储在某处,然后 "wait" 每个客户端都必须存储数据才能请求数据。 webSocket 或 Ajax.

都没有 "built-in" 缓存机制

Is it true that socket.io is not compatible at all with many browsers ? My app would be more focused to mobile devices and I think this could make me think about choosing ajax instead.

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

在移动世界中,我想你会发现如果不使用某种可以插入本机的本机应用程序组件,你就无法在后台可靠地进行实时通知 "push" 设备上的系统,因为这是唯一既省电又与电源管理完全兼容的系统。只要网页不是前台任务或设备处于空闲状态,就会对其进行电源管理。