Ada*_*dam 9 javascript spring stomp websocket spring-websocket
我可以在Spring文档之后通过WebSockets发送和接收带有STOMP的JSON .然而,在高速率下性能很差,因此我希望分析二进制消息的使用.
我使用SimpMessageTemplate发送消息和必要的代理中继 - 请参阅spring文档
@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);
}
}
Run Code Online (Sandbox Code Playgroud)
JavaScript客户端使用标准机制使用stomp.js接收数据.
var subscription = client.subscribe("/app/binarydemo", new function(message) {
console.log("RX message", typeof message.body, message.body.length);
});
Run Code Online (Sandbox Code Playgroud)
收到消息,但作为字符串,控制台输出如下.我期待一些原始类型,比如ArrayBuffer
RX message string 3
RX message string 3
Run Code Online (Sandbox Code Playgroud)
我实现了STOMP T代表文本,但是Spring文档意味着二进制消息可能至少与普通的WebSockets,也蹬规范状态
STOMP是基于文本的,但也允许传输二进制消息.
更新:我在服务器端做了更多的调试.看来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)));
}
Run Code Online (Sandbox Code Playgroud)
看来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)));
}
Run Code Online (Sandbox Code Playgroud)
更新
| 归档时间: |
|
| 查看次数: |
8332 次 |
| 最近记录: |