¿RESTful HTTP y websocket en la misma aplicación?

17

Si una aplicación ya está abierta WebSocketpara transmisiones en vivo, ¿debería usarla AJAXpara otras comunicaciones con el servidor?

Debido a que la conexión ya está abierta, ¿deberíamos usarla para solicitudes que son Request/Responsey no en tiempo real?

Prefiero las RESTful HTTPsolicitudes porque las encuentro más fáciles de depurar. Puede usar un navegador con URL o rizos para probar lo que devuelve la API. No tiene que escribir código para abrir a WebSocket.

¿Sería extraño tener RESTful HTTP APIuna y WebSocketen la misma aplicación?

Bagazo
fuente
1
"no tiene que escribir ningún código para probar la API" ¿Podría explicar esto un poco más? ¿Qué te hace pensar que no tienes que probar la API?
Elias Van Ootegem
Las herramientas para desarrolladores de Chrome, si no me equivoco, le permiten abrir un websocket y enviar mensajes en tiempo real
maple_shaft
@EliasVanOotegem Buen punto. Lo siento, eso no estaba claro. Aún debe probar la API con un proyecto de unidad en el lado del servidor. Lo que quiero decir es que, si quieres echar un vistazo rápido a lo que devolvería la API, puedes usar un broswer con la URL. No tiene que escribir código para abrir un websocket. Actualicé mi pregunta.
Marc
@maple_shaft Eso es bueno, pero debe estar en una página con un WebSocket abierto al servidor.
Marc

Respuestas:

14

Uno de los objetivos principales de diseño de Websockets es que permite que los protocolos HTTP y Websocket se comuniquen a través del mismo puerto. Lo logra al exigir explícitamente a un cliente que realice un protocolo de enlace Websocket con una solicitud de actualización HTTP. De esta manera, el servidor puede manejar una conexión de solicitud HTTP estándar, así como una solicitud de actualización HTTP que ahora se actualiza a una conexión dúplex bidireccional persistente.

Entonces, sí, este es definitivamente un caso de uso válido, sin embargo, si DEBERÍA hacer esto para su aplicación específica es un asunto completamente diferente. Los Websockets son útiles y tienen sentido cuando tiene escenarios en los que el servidor debe tener la capacidad de enviar datos no solicitados al cliente (transmisiones en vivo). El protocolo HTTP y los servicios REST son útiles cuando desea bloquear la solicitud de datos de clientes síncronos.

Si sus requisitos son tales que ambos tienen sentido para su aplicación, entonces, por supuesto, debe usar ambos. Sin embargo, si su única interacción con el servidor se basa en la transmisión en vivo, entonces los servicios REST no son apropiados. Creo que la facilidad de depuración debe tener una importancia bastante baja en términos de Atributos de calidad del sistema para los que debe diseñar su diseño.

árbol de arce
fuente
1
Eso es lo que me preguntaba. Tiene sentido usar websockets para la transmisión en vivo en tiempo real, pero ¿qué pasa con las operaciones CRUD? Tiene más sentido en mi mente usar una solicitud HTTP estándar para esos.
Marc
2
@Marc, no me parecería extraño separar las operaciones CRUD y las preocupaciones en tiempo real (una usando HTTP y la otra Websockets) ... pero ... creo que obtendrá una mejor capacidad de respuesta del servidor, así como mejor rendimiento, si utiliza la conexión persistente (Websocket) para todas sus operaciones. Esto realmente depende de cuáles sean sus necesidades de CRUD, pero no me alejaría de una interfaz CRUD Websocket.
Myst
¡Votado! novato aquí, ya que mencionó que ambos se deben comunicar a través del mismo puerto, si va a buscar, digamos, los precios de las acciones de una transmisión en vivo y debido al tráfico pesado, la transmisión se desconecta durante unos minutos, ¿cómo podría obtener los datos en el medio o qué? existen estrategias para abordar ese caso
PirateApp