RESTful HTTP和websocket在同一应用程序中?


17

如果某个应用程序已经打开WebSocket了实时供稿,是否应该将其AJAX用于与服务器的其他通信?

因为连接已经打开,我们应该将其用于Request/Response不是实时的请求吗?

我更喜欢RESTful HTTP请求,因为我发现它们更易于调试。您可以使用带有url或curl的浏览器来测试API返回的内容。您无需编写代码即可打开WebSocket

在同一应用程序中拥有RESTful HTTP API和会很奇怪WebSocket吗?


1
“您不必编写任何代码即可测试API”可以解释一下吗?是什么让您认为您不必测试API?
Elias Van Ootegem '16

Chrome开发者工具(如果我没记错的话)允许您打开websocket并实时发送消息
maple_shaft

@EliasVanOotegem好点。抱歉,不清楚。您仍然必须在服务器端使用单元项目测试API。我的意思是,如果您想快速查看API返回的内容,则可以在URL中使用浏览器。您无需编写代码即可打开websocket。我更新了我的问题。
Marc

@maple_shaft很好,但是您需要在一个向服务器打开WebSocket的页面上。
Marc

Answers:


14

Websockets的核心设计目标之一是它允许HTTP和Websocket协议都在同一端口上进行通信。它通过明确要求客户端通过HTTP升级请求执行Websocket握手来实现此目的。这样,服务器可以处理标准的HTTP请求连接以及现在已升级为持久双向双工连接的HTTP升级请求。

是的,这绝对是一个有效的用例,但是,是否应该为特定的应用程序执行此操作完全是另一回事。Websocket非常有用,在您必须满足以下条件的情况下有意义:服务器必须能够将未经请求的数据发送到客户端(实时供稿)。如果要阻止同步客户端请求数据,则HTTP协议和REST服务非常有用。

如果您的要求对这两者都适合,那么您应该同时使用两者。但是,如果您与服务器的唯一交互是基于实时源的,则REST服务是不合适的。我觉得安心调试应该排在重要性相当低的方面的系统的质量属性,你应该构建您的设计。


1
那就是我想知道的。使用websocket进行实时实时订阅是有意义的,但是CRUD操作呢?在我看来,对它们使用标准的HTTP请求更有意义。
Marc

2
@Marc,我不会发现将CRUD操作和实时问题分开(一个使用HTTP,另一个使用Websockets)是很奇怪的。如果您将持久连接(Websocket)用于所有操作,则性能会更好。这确实取决于您对CRUD的需求,但是我不会回避CRUD Websocket界面。
Myst

赞!这里的新手,因为您提到了两者都将通过同一个端口进行通信,所以如果您从实时流中获取股票价格,并且由于交通繁忙,该流断开了几分钟,那么您将如何获取两者之间的数据?存在解决该情况的策略
PirateApp '18
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.