javascript – 是否可以使用Spring-WebSockets通过WebSockets通过STOMP发送二进制数据?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 是否可以使用Spring-WebSockets通过WebSockets通过STOMP发送二进制数据?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2514字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 是否可以使用Spring-WebSockets通过WebSockets通过STOMP发送二进制数据?](/upload/InfoBanner/zyjiaocheng/706/f04218857a074e8885dc60ce01e17f5c.jpg)
我能够在spring documentation之后通过WebSockets发送和接收带有STOMP的JSON.但是在高速率下性能很差,所以我希望分析二进制消息的使用.
> Spring-WebSockets 4.0
>在Chrome 35中运行的JavaScript客户端
> stomp.js 1.7.1
发出
我使用SimpMessageTemplate和必要的代理中继发送消息 – 见spring documentation
@Controller
public class DemoBinaryController {
@Autowired
private SimpMessagingtemplate template
@Scheduled(fixedDelay = 5000)
public void demo() throws Exception {
GenericMessage<byte[]> message = new GenericMessage<byte[]>(new byte[]{65,66,67});
template.send("/app/binarydemo", message);
}
}
接收
JavaScript客户端使用标准机制使用stomp.js接收数据.
var subscription = client.subscribe("/app/binarydemo", new function(message) {
console.log("RX message", typeof message.body, message.body.length);
});
收到消息,但作为字符串,控制台输出如下.我期待一些原始类型,如ArrayBuffer
RX message string 3
RX message string 3
我尝试过的事情
我意识到STOMP中的T代表Text,但Spring文档意味着二进制消息至少可以使用普通的WebSockets,也就是stomp specification状态
STOMP is text based but also allows for the transmission of binary
messages.
>调试发送代码,就我所见,它似乎保持为byte []
>接收时调试stomp.js库.在底层ws.onmessage回调中收到该消息似乎是一个字符串(stomp-1.7.1.js中的第243行)
>大量的搜索 – 这似乎是一个罕见的主题,几乎没有信息
>查看stomp.js源代码.对二进制的唯一引用是ws.binaryType =“arraybuffer”.
更新:我在服务器端做了更多的调试.看来org.springframework.web.socket.TextMessage总是在org.springframework.web.socket.messaging.StompSubProtocolHandler而不是org.springframework.web.socket.BinaryMessage中使用.我已经为此SPR-12301提出了功能请求
message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build();
byte[] bytes = this.stompEncoder.encode((Message<byte[]>) message);
synchronized(session) {
session.sendMessage(new TextMessage(new String(bytes, UTF8_CHARSET)));
}
我的问题
>采用这种技术组合,这种方法是否可行?
>我错过了一些关键步骤吗?
>任何人都可以向我指出一个有效的例子
解决方法:
看来org.springframework.web.socket.TextMessage总是在org.springframework.web.socket.messaging.StompSubProtocolHandler而不是org.springframework.web.socket.BinaryMessage中使用.我已经为此SPR-12301提出了一项功能请求,已被接受.
message = MessageBuilder.withPayload(message.getPayload()).setHeaders(headers).build();
byte[] bytes = this.stompEncoder.encode((Message<byte[]>) message);
synchronized(session) {
session.sendMessage(new TextMessage(new String(bytes, UTF8_CHARSET)));
}
更新
> SPR-12301在4.1.2中提供,但仅添加了对接收二进制消息的支持
>引发SPR-12475发送二进制消息
内容总结
以上是互联网集市为您收集整理的javascript – 是否可以使用Spring-WebSockets通过WebSockets通过STOMP发送二进制数据?全部内容,希望文章能够帮你解决javascript – 是否可以使用Spring-WebSockets通过WebSockets通过STOMP发送二进制数据?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。