javascript - 通过 Sockjs + Spring Websocket + Stomp 发送图像/文件

标签 javascript stomp spring-websocket sockjs

我正在使用 Spring websockets(STOMP 作为子协议(protocol))和 Sockjs 开发一个消息传递应用程序。

我应该提供支持以在消息中发送文件。

根据this ticket , sockjs 不支持二进制数据,但是 STOMP 支持。

我知道我们可以将图像转换为 base64 并通过 stomp 发送,但我认为这不是最佳实践,因为有很多转换和开销。我还必须保存消息,所以要再次将这个 base64 编码文件保存在服务器上,我必须对它们进行解码。

我有几个问题:

1) 是否有通过 sockjs + stomp 发送图像/文件的解决方法或 转换为 Base64 是唯一的方法吗?

2) 可能这是一个非常愚蠢的问题,但根据 this question可以通过 STOMP(不带 sockjs)发送二进制数据。没有 sockjs 支持 fallback 有多难?

谢谢你。

编辑 : 如果使用 base64 是唯一的选择,我宁愿发出 POST 请求来保存带有附件的消息,而不是使用 base64 编码。有什么更好的想法吗?

最佳答案

如果是 base64 编码,任何 Web Socket 实现都将处理二进制数据。这实际上将二进制流序列化为字符串。所有套接字传输和包装器都可以处理字符串数据。任何 Java base64 实现都应该可以工作。

在浏览器方面,base64 在现代浏览器中使用 btoa() 本地处理和 atob() .如果您支持旧版浏览器,您可能需要一个 polyfill。

也就是说,如果 Java 服务器只是代理 Web 用户之间的消息,您不需要在 Java 中解码图像,您只需将字符串编码的图像从一个套接字连接传递到另一个套接字连接。

关于javascript - 通过 Sockjs + Spring Websocket + Stomp 发送图像/文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31111528/

相关文章:

javascript - 无法使用 @stomp/stompjs 订阅主题

spring boot rest 和带有 websocket 的 angular2(踩过 sockjs)

spring - 在spring websocket上实现stomp时的"message:Broker not available."错误

javascript - 在对象内部创建对象然后添加到嵌套对象时,控制台仅返回 "object"而不是添加到其中的值

javascript - 如何将初始页面的 url 保存为 js 中的变量并在提交表单后使用它?

javascript - 加载时如何更新 Angular2.RC1 子组件?

java - ActiveMQ 向 StompConnection 注册监听器

java - 如何查看 Spring Websocket 中的 ConcurrentWebSocketSessionDecorator 缓冲区?

java - @MessageMapping 返回上的 STOMP header

javascript - 从 charts.js 中删除工具提示