REST API还是WebSocket?

3

我正在开发一个需要实时事件的Web应用程序和移动应用程序(例如聊天,我需要推送到另一个客户端)。我使用Node、MongoDB、Angular、PhoneGap进行开发。

我一开始使用REST API和socket.io进行混合,但现在考虑将其转换为100%的websocket应用程序。

我知道这样开发会更加困难,但对于您来说,什么是最好的解决方案呢?

提前感谢!

3个回答

2
异步技术绝对是支持大量客户端的最佳选择。异步使服务器能够随时向客户端发送数据,而其余部分只涉及客户端到服务器的通信。因此,您需要轮询,这非常昂贵且效率低下。
WebSocket 也更好,因为它在网络上使用的数据较少。连接后不依赖于 HTTP 协议,而是建立了一个 TCP 连接。如果有代理,您可能需要小心处理。
WebSocket 本身只是一个简单的线路,除了发送/接收之外没有其他协议。因此,您需要使用一些东西来管理通道和订阅,STOMP 通常用于此。您可以查看 stomp.js。
您还可以考虑使用 SSE。它比 WebSocket 更简单,依赖于 HTTP,因此更加繁琐。实际上,WebSocket 并不复杂,有一些库可以帮助您。
您还可以将 WebSocket 与 REST 混合在 API 的某些部分中,并保留 REST 用于另一部分。您需要评估哪种方法更合理。
一些资源:

谢谢,我已经看了SSE,但它并不完全是我要找的。我想我会坚持这种方式,并为我的应用程序使用Websockets。 - Jowy

1

您可能会对WAMP(http://wamp.ws/)感兴趣,它在WebSocket之上提供了灵活的应用程序消息传递:

  • 远程过程调用(大致对应REST)
  • 发布和订阅(用于实时推送/通知)

免责声明:我是WAMP的原始作者,目前在Tavendo工作。


不用了,我只会使用 WebSocket,但我会为其他应用程序收藏您的网站 ;) - Jowy
@oberstet 您能否解释一下如何使用REST API + WebSocket来实现具备广播系统的CRUD应用程序。例如,我更新的博客文章评论存储在数据库表中,并广播给所有有权访问该博客文章的用户。 - Ashwin Parmar
@AshwinP 当然可以。您能否提交一个新的问题并在此处链接?在评论中回答很繁琐。例如:“如何将实时通知与REST/CRUD应用程序结合使用?” - oberstet
我不知道是否可能。 - Ashwin Parmar

-1

这取决于使用场景。很久以前我开始学习NodeJS时,我有机会使用SocketIO和ExpressJS。
因此,我建议为正确的事情使用正确的工具。如果需要实时性,例如发送消息、聊天等,则使用SocketIO是不错的选择,但如果要求简单地访问某些网络资源,而不需要实时实现,则在客户端使用基本的REST API(如ajax)或其他方式。这也有助于捕获数据,从而减轻服务器负担。

您可以在NodeJS应用程序中同时实现SocketIO和一些RESTful实现库。


谢谢,所以我会使用WebSocket,因为我的应用需要实时性,而且我认为学习WebSocket是一个不错的选择 :)。 - Jowy
好的... 给我点踩的人...能解释一下吗? - Aman Gupta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接