with example enablewebsocketmessagebroker baeldung application and javascript stomp spring-websocket sockjs

javascript - example - spring websocket chat demo



Envío de imágenes/archivos a través de Sockjs+Spring Websocket+Stomp (3)

Cualquier implementación de Web Socket manejará datos binarios si está codificada en base64. Esto esencialmente serializa una secuencia binaria a una cadena. Todos los transportes de socket y envoltorios pueden manejar datos de cadena. Cualquier implementación de Java base64 debería funcionar.

En los navegadores, la base64 se maneja de forma nativa en los navegadores modernos con btoa() y atob() . Si es compatible con los navegadores antiguos, es posible que necesite un polyfill.

Dicho esto, si el servidor Java solo está procesando mensajes entre usuarios de la Web, no tendrá que decodificar las imágenes en Java, simplemente pasará las imágenes codificadas de cadena de una conexión de socket a otra.

Estoy trabajando en una aplicación de mensajería que usa Spring Websockets (STOMP como subprotocolo) y Sockjs.

Debería proporcionar soporte para enviar archivos en mensajes.

Según este ticket , sockjs no admite datos binarios, pero STOMP sí lo hace.

Sé que podemos convertir la imagen a base64 y enviarla por stomp, pero creo que esta no es la mejor práctica, ya que hay mucha conversión y gastos generales. También tengo que guardar los mensajes, así que para guardar estos archivos codificados en base64 en el servidor nuevamente tendré que decodificarlos.

Tengo un par de preguntas :

1) ¿Existe una solución para enviar imágenes / archivos a través de sockjs + stomp o convertir a Base64 es la única manera?

2) Puede ser una pregunta muy tonta, pero de acuerdo con esta pregunta es posible enviar datos binarios a través de STOMP (sin sockjs). ¿Qué tan difícil es soportar el respaldo sin sockjs?

Gracias.

EDITAR : Si usar base64 es la única opción, prefiero hacer una solicitud POST para guardar los mensajes que tienen archivos adjuntos en lugar de usar la codificación base64. ¿Alguna idea de cuál es mejor?


Otra alternativa sería utilizar WebRTC solo para enviar las imágenes binarias. Una de las ventajas de esto es que estos mensajes serían puramente peer-to-peer. Solo necesitarías implementar esto en tu aplicación web y no en tu backend. Entonces no tendría que pagar por el ancho de banda utilizado para las imágenes. Desafortunadamente, sin embargo, WebRTC no es compatible con IE.