Javascript 通过Sockjs+发送图像/文件;弹簧腹板套筒+;跺脚

Javascript 通过Sockjs+发送图像/文件;弹簧腹板套筒+;跺脚,javascript,stomp,spring-websocket,sockjs,Javascript,Stomp,Spring Websocket,Sockjs,我正在使用SpringWebSockets(STOMP作为子协议)和Sockjs开发一个消息传递应用程序 我应该提供支持,以发送邮件中的文件 根据,sockjs不支持二进制数据,但STOMP支持 我知道我们可以将图像转换为base64并通过stomp发送,但我认为这不是最佳做法,因为转换和开销很大。我还必须保存消息,因此要在服务器上再次保存此base64编码文件,我必须对其进行解码。 我有几个问题: 1) 是否有一种解决方法可以通过sockjs+stomp发送图像/文件,或者转换为Base64是

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

我应该提供支持,以发送邮件中的文件

根据,sockjs不支持二进制数据,但STOMP支持

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

我有几个问题:

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

2) 这可能是一个非常愚蠢的问题,但根据这个问题,可以通过STOMP发送二进制数据(不使用sockjs)。没有sockjs支持回退有多困难

多谢各位


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

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

在浏览器端,base64在带有
btoa()
atob()
的现代浏览器中以本机方式处理。如果您支持传统浏览器,则可能需要polyfill


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

你可以看看binaryjs。它承诺使用websockets为web提供实时二进制流

让我们检查一下示例

您应该检查,链接将指导您如何实施

据了解,您可以在客户端使用[base64 polyfill lib()


致以最诚挚的问候

另一种选择是仅使用WebRTC发送二进制图像。这种方法的优点之一是这些消息完全是对等的。您只需要在Web应用程序中实现这一点,而不需要在后端实现这一点。这样您就不需要为图像使用的带宽付费。不幸的是hough,IE不支持WebRTC。

我知道,普通websocket实现支持二进制数据。但我特别想知道
SockJS
是否有任何破解/扭转。我知道我们可以使用base64编码,但我正在寻找替代方案,因为这个应用程序有非常频繁的带有atta的消息chments。因此,使用base64不必要地增加了大小。但它会流式传输,还是在发送之前只在一次过的字符串操作中编码。换句话说,使用WebSocket进行此操作是否有效?我想你可能误解了我的问题,我不是在寻找支持二进制的东西,我在寻找一种发送二进制的方法通过SockJS传输数据。你为什么希望传输二进制数据,特别是通过SockJS传输二进制数据,你是想支持旧浏览器还是其他原因?是的,我不想自己实现回退选项。你能检查一下吗?我想,它可以替代SockJS。它还支持回退方案。是的,这是我探索的第一件事,但我可以不是根据我的需要定制的。可能是我没有正确使用它,但不知何故我对它感到不舒服。这不会解决问题,对吗?我必须将邮件保存在服务器上。WebRTC.Yep不允许脱机邮件。如果这不是实时ap,我不知道为什么要使用WebSocket发送二进制数据应用程序。如果您正在排队等待消息,则使用多部分上载更有意义。用户可以通过websocket连接与在线的不同用户聊天,如果他想向离线用户发送消息,我可以使用相同的websokcet连接。客户端为什么要担心用户是否在线?