在angular中使用websockets时,使用http客户端服务调用api是否有任何必要/优势



我正试图通过使用socket.io库和MEAN堆栈构建一个简单的聊天应用程序来学习如何使用socket.io。

通过查看一些开源项目(如本项目(,我发现客户端主要在执行聊天逻辑时通过websocket与服务器通信,而不是通过angular提供的http客户端服务。

这是否意味着在使用web套接字进行实时更新时,不需要使用http与服务器通信?

肯定不是。不过,这不是角度的问题,它只是为正确的事情选择正确的工具。

长话短说:

  • 如果是请求/响应模型,则使用http。为什么?
    1. 因为它更容易处理。代理、dns和负载均衡器不需要额外的配置来处理。Web套接字可以
    2. 您已经设置了1,所以这不是问题。您将如何处理缓存、路由、gzping、SEO以及http协议和rest api处理的所有开箱即用的东西?你所构建的一切,所有的通信都需要自己的安全考虑、设计模式等
    3. 您将如何处理web套接字的有状态性?它们目前只支持垂直扩展,而rest api同时支持水平和垂直扩展

如果你真的需要全双工通信(只有没有套接字的服务器推送(,那么你应该将网络套接字的使用限制在你真正需要的情况下。

即使在这种情况下,也要通过signalR这样的框架。所有现代浏览器都支持websocket,但许多用户仍然没有支持它们的浏览器。SignalR在这些情况下又回到了长期民意调查。如果你在所有情况下都使用它,想象一下如果你使用这样的浏览器,并对每个请求应用长轮询会发生什么。

我可以继续说下去,但我想你明白意思了。

最新更新