我正在开发一个网络应用程序,我想知道哪种方法适合我的项目。
基本上我要向用户显示的是一些通知,这些通知来自对其他服务器的请求。我的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。
是否有其他建议?
我希望这可以清除我的思想和处于相同情况的其他人:) 感谢
答案 0 :(得分:14)
这里讨论了webSocket和Ajax之间的许多通用权衡:
websocket vs rest API for real time data?
此处讨论了移动设备的一些权衡问题:
Cordova: Sockets, PushNotifications, or repeatedly polling server?
简而言之,如果您的数据主要是服务器驱动的,然后需要发送给客户端,并且您希望客户端看到新数据时具有相当好的延迟,那么这就是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有一些非常好的自动重新连接逻辑,只要它失去了真正有用的连接。
在移动世界中,我认为您只是发现在后台不能可靠地进行实时通知而不使用可以插入本机“推送”系统的某种原生应用程序组件该设备是因为这是唯一兼具电池效率且与电源管理完全兼容的系统。一旦网页不是前台任务或设备闲置,网页就会进行电源管理。