Websocket API 取代 REST API?[已关闭]

2022-08-30 05:36:42

我有一个应用程序,其主要功能通过websockets或长轮询实时工作。

但是,该网站的大部分内容都是以RESTful的方式编写的,这对于将来的应用程序和其他客户端来说很不错。但是,我正在考虑从REST过渡到所有站点功能的websocket API。这将使我更容易将实时功能集成到网站的所有部分中。这是否会使构建应用程序或移动客户端变得更加困难?

我发现有些人已经在做这样的事情了:SocketStream。


答案 1

并不是说这里的其他答案没有价值,他们提出了一些很好的观点。但是,我将违背普遍的共识,并同意你的观点,即转向websockets不仅仅是实时功能,这是非常有吸引力的。

我正在认真考虑通过websockets将我的应用程序从RESTful架构移动到更多的RPC风格。这不是一个“玩具应用程序”,我也不是在谈论实时功能,所以我确实有保留。但是我看到了走这条路有很多好处,并觉得它可能是一个特殊的解决方案。

我的计划是使用DNodeSocketIOBackbone。使用这些工具,我的Backbone模型和集合可以通过简单地调用RPC样式的函数从/到客户端和服务器传递。不再需要管理 REST 终结点、序列化/反序列化对象等。我还没有使用套接字流,但它看起来值得一试。

在我能够明确地说这是一个很好的解决方案之前,我还有很长的路要走,而且我确信它不是每个应用程序的最佳解决方案,但我相信这种组合将非常强大。我承认存在一些缺点,例如失去缓存资源的能力。但我有一种感觉,优势将超过它们。

我有兴趣跟随您的进度来探索这种类型的解决方案。如果你有任何github实验,请指给我看。我还没有,但希望很快。

以下是我一直在收集的待读链接列表。我不能保证它们都是值得的,因为我只略读了其中的许多。但希望有些人会有所帮助。


关于在Express中使用 Socket.IO 的很棒的教程。它向 socket.io 公开了快速会话,并讨论了如何为每个经过身份验证的用户提供不同的聊天室。

关于node.js/socket.io/backbone.js/express/connect/jade/redis with authentication,Joyent hosting等的教程:

关于将推杆与骨干.js(使用导轨)的教程:

使用主干构建应用程序.js客户端和节点上.js在服务器上使用快速、socket.io、dnode。

将 Backbone 与 DNode 结合使用:


答案 2

HTTP REST和WebSockets非常不同。HTTP是无状态的,因此Web服务器不需要知道任何东西,您可以在Web浏览器和代理中进行缓存。如果使用 WebSockets,则服务器将变为有状态,并且需要连接到服务器上的客户端。

请求-答复通信与推送

仅当需要将数据从服务器推送到客户端时才使用 WebSockets,该通信模式不包含在 HTTP 中(仅通过变通办法)。如果其他客户端创建的事件需要对其他连接的客户端可用,例如在用户应该对其他客户端行为采取行动的游戏中,PUSH会很有帮助。或者,如果您的网站正在监控某些内容,则服务器始终将数据推送到客户端,例如股票市场(实时)。

如果您不需要从服务器推送数据,则使用无状态HTTP REST服务器通常更容易。HTTP 使用简单的请求-答复通信模式。