添加到绝对正确的答案@alapeno发布,这里没有“最佳实践”。这是你的使用案例。
使用Websockets(其中socket.io只是一个实现,恕我直言,有更好的)允许你有双向通信之间的客户端和服务器,其中服务器可以发起通信,只要套接字已启动。
另一方面,Ajax要求客户端每次启动通信。
两者都有优点和缺点。
的WebSockets
一些优点
低开销用于发送和接收数据
可以取代 “传统的Ajax” 使用像SwaggerSockets
服务器的消息格式可以把事件给客户 个
一些缺点
服务器上的低效利用内存。如果您有大量套接字连接,则服务器进程使用的RAM数量将迅速增加。一些Websocket库在内存管理上比其他的更差。 (即你将需要更多的服务器/资源)
没有“标准化”的方式来记录发送和接收数据的格式。您需要明确如何通过已建立的套接字调用服务器上的函数,或者探索使用SwaggerSockets之类的东西。
如果第三方需要使用您的API,Websockets可能是数据交换的一个特别糟糕的选择,因为大多数应用程序可以轻松地调用REST API,但使用基于套接字的方法设置较少。
阿贾克斯
一些优点在服务器上
较低的存储需求。由于连接不是“永久”持久的,并且是为了拉取而非推送而设计的,所以与使用Websockets相比,您可能会处理更多的客户端。
标准化文档格式。使用Swagger,Slate等为您的API创建出色的可读文档,这对您未来的自我以及任何潜在的第三方都很有用。
Ajax通常被大多数Web开发人员很好的理解。
减整体复杂
一些缺点 - 更多的开销。对于每一个请求,你都会有不同的头文件,TCP开销等,尽管这不是一个真正的问题。正如@alapeno所说,现代浏览器在连接管理方面非常智能。 - 无推送通知。如果你想知道服务器上发生了什么事情,你必须问。 (服务器发送的事件在浏览器支持方面仍然处于初级阶段,尽管这对于推送来说最终会是一个不错的选择。)
我确定每个类别都可以添加更多的点,但那些点是我在选择时经历的许多事情。
不同用例的一个很好的例子是Stripe vs. Slack。
条纹有一个非常好的REST API,因为它们直接针对事务操作。他们没有在外部使用Websockets,因为它对他们的模型没有意义。
另一方面,Slack是关于实时通信。他们广泛地使用Websockets发送和接收消息,因为用户在发送数据后立即收到数据是非常必要的。当然,Slack也有一个REST API,所以在单一服务中使用它们显然是有意义的。