我应该为地理定位应用程序使用 REST API 还是 Socket.io?

Posted

技术标签:

【中文标题】我应该为地理定位应用程序使用 REST API 还是 Socket.io?【英文标题】:Should I use a REST API, or Socket.io for a Geolocation App? 【发布时间】:2016-01-11 04:16:33 【问题描述】:

我需要跟踪移动的汽车。

我是否应该在每次位置更改时发布位置,然后通过套接字发送?

或者应该创建一个 REST API 并发布位置(来自被跟踪设备)并每 10 秒检查一次(使用跟踪设备),无论位置是否改变?

(该应用程序正在使用 React Native 制作)

【问题讨论】:

两者都可以。哪个扩展性更好? 【参考方案1】:

通过频繁更新构建 HTTP 请求比通过 websocket 发送消息需要更多资源。保持许多用户打开 websocket 连接需要比使用 HTTP 更多的资源。在我看来,答案取决于用户数量、更新频率、是否应用 REST 约束(无服务器端会话)以及使用的 HTTP 版本(据我所知,HTTP2 比 HTTP1.1 更有效)。我不认为这是我们可以在没有测量的情况下告诉你的。

如果您想将数据从服务器推送到客户端,也是如此。如果您经常这样做并且必须几乎立即更新,那么 websocket 可能是比轮询更好的选择。如果您很少这样做并且延迟(轮询频率)可能是几分钟,那么轮询可能会更好。

请注意,我不是负载扩展专家,这只是外行的逻辑。

【讨论】:

我明白了。更新必须至少每 5-10 秒进行一次。该应用程序将从约 300 个用户开始。我更倾向于在应用程序的其他部分可能需要它们的套接字,例如在相关汽车开始移动时通知客户,以便客户开始询问位置。问题还在于哪种方法更易于维护,代码方面。 @Emilios1995 这意味着每秒 30-60 个小请求。我认为这两种解决方案都不会出现问题,任何普通服务器都应该能够轻松处理此流量。我认为维护websocket更容易,但维护HTTP版本也不是很努力。如果你不喜欢轮询,你可以使用 SSE 来代替。我目前正在阅读有关 HTTP 2 的信息,它似乎支持原生推送。我建议您等待其他更有经验的答案,也许它们会包含我不知道的方面。 @Emilios1995 如果您决定使用 HTTP,我认为您不需要 REST。不需要超链接,并且您不会有多个 3rd 方客户端,并且 API 可能也不会及时更改,因此您不需要更新客户端。换句话说,您不需要统一接口约束的灵活性。办公室。你可以使用一些 REST 约束,比如无状态约束,也可能是纯 JSON,但这只是一个简单的 web 应用程序,不会迅速改变,所以我认为你不需要更多。 @Emilios1995 - 如前所述,对于小型部署和低频更新,基本上任何东西都可以。我建议使用 WebSockets,因为从长远来看,这种方法可以更好地扩展。 @gzost 您应该添加答案而不是评论。【参考方案2】:

我会使用 WebSockets。对于小型部署和低频更新,基本上任何东西都可以工作,但是使用 WebSockets,您拥有的技术可以在长期内更好地扩展。 (不,我不会考虑这种过早的优化,因为这里的技术选择并不意味着不必要的初始开销。)

无耻插件:如果您使用 WebSocket,您可以查看 Crossbar.io - http://crossbar.io 或 WAMP (http://wamp-proto.org),它在 WebSocket 之上提供消息传递机制,并且应该适用于你用例。我为这家核心公司工作,但它是开源软件。

【讨论】:

以上是关于我应该为地理定位应用程序使用 REST API 还是 Socket.io?的主要内容,如果未能解决你的问题,请参考以下文章

使用 IP 进行地理定位是查找计算机位置的好方法吗

使用 bing map api 获取地址(邮政编码)自动地理定位?

带有地理围栏的 html5 地理定位 API

如何使用谷歌地理定位 API?

Chrome 地理定位传感器破坏 CORS

基于 SOAP 或 REST 的地理定位服务?