基本上我想向用户显示的是一些通知,这些通知是从请求到其他服务器的.我的node.js应用程序获取所有信息,然后分发给用户,将副本保存到我的MongoDB中.
这个想法很简单,但阅读有关我发现这两种技术的方法:
> Ajax:如果服务器上有新内容,客户端将检查所有时间.这将通过使用jquery ajax获取到我的服务器API(每30秒60秒)完成.
> Socket.io:客户端连接一次,然后维护一个永久的TCP连接(更实时).
现在我已经解释了这个情况,我有以下几个问题:
>我不会有太多的请求与ajax?想像一下,我想每一分钟都要检查一下服务器,如果我们将应用程序扩展到100个用户,那么每分钟会给我100个查询.在系统资源中是否“便宜”一个套接字?
> socket.io是移动设备的问题吗?带宽和性能.服务器的响应始终是JSON格式的信息.
>我看到now.js可以用于这个,但似乎项目不再被支持,所以不知道如果使用它将是一个好主意.
>这两种方法的缓存怎么样?我正在考虑为每个用户创建一个缓存文件,这将由服务器端的node.js更新.我猜这可能会很好用ajax,但是socket.io呢?
>这是真的,socket.io是不兼容的许多浏览器?我的应用程序将更加专注于移动设备,我认为这可以让我考虑选择ajax.
>任何替代建议?
我希望这可以清除我的想法和在同样的情况下的其他人:)
谢谢
websocket vs rest API for real time data?
这里讨论移动设备的一些权衡问题:
Cordova: Sockets,PushNotifications,or repeatedly polling server?
简而言之,如果您的数据主要是服务器驱动的,然后需要发送给客户端,并且您希望在客户端查看新数据时有相当好的延迟,那么这是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轮询实现中,服务器必须将数据存储在某处,并为每个客户端“等待”然后请求数据. webSocket或Ajax没有“内置”缓存机制.
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有一些非常好的自动重新连接逻辑,只要它失去了真正有用的连接.
在移动世界中,我想你只会发现在后台无法可靠地执行实时通知,而不使用某种本机应用程序组件,可以插入设备上的本机“推送”系统,因为这是唯一一款既具有电池效率又与电源管理完全兼容的系统.一旦网页不是前台任务或设备空闲时,网页就要进行电源管理.