我正在开发一个SPA -有些功能需要实时双向通信,有些不需要。
在这里混合XHR和Websockets有什么原因吗?
我怀疑,因为我需要使用WebSockets无论如何,只是使用WebSockets的一切是最有意义的,但我想知道是否有任何考虑我没有考虑到。
这取决于XHR请求的结果与websocket连接相比是什么?Websockets通常通过不创建HTTP头而更快,并且允许传输更大量的数据。
根据经验,我会非常努力地使应用程序中的所有请求/事务都相同-应用DRY原则可以使您和其他必须在项目中工作的人生活得更轻松。
这实际上取决于您在应用程序中做什么。你这句话说到点子上了:
有些功能需要实时双向通信,有些则不需要。
如果你需要一个实时的全双工通信通道,那么求助于轮询、长轮询、流等在HTTP上的黑客手段,只是为了在所有地方保持相同的API之王,可能是一种痛苦。
websockets也是如此。如果你在一个地方使用websockets,把所有的东西都换成websockets,这样在任何地方都有相同的API,这可能会是一种痛苦。
Websocket技术还在不断成熟,它还没有像Ajax (HTTP)那样拥有一整套工具或框架。许多服务器端和客户端框架可以轻松处理通过Ajax访问的RESTful api。对于websockets来说还不是这样。出于这个原因,对于大量用例来说,坚持使用Ajax并仅在必要时使用websockets是有意义的。
还有风格上的差异。在RESTful API中,你是在导航资源url,而在websocket中,你只有一个接收命令的端点。如果你可以用一种风格来适应所有的交互,那么就使用一种风格,只是要确保你没有从仍然以Ajax/HTTP为中心的工具/框架中丢失一些东西。