Skip to content Skip to sidebar Skip to footer

Is It Possible To Send Binary Data With STOMP Over WebSockets Using Spring-WebSockets?

I am able to send and receive JSON with STOMP over WebSockets following spring documentation. However performance is poor at large high rates, so I wish to profile the use of binar

Solution 1:

It seems that org.springframework.web.socket.TextMessage is always used within org.springframework.web.socket.messaging.StompSubProtocolHandler rather than org.springframework.web.socket.BinaryMessage. I've raised a feature request for this SPR-12301 which has been accepted.

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)));
}

Update

  • SPR-12301 was delivered in 4.1.2 but only adds support for receiving binary messages
  • Raised SPR-12475 for sending of binary messages

Solution 2:

Try to configure you Server just with ByteArrayMessageConverter:

@Configuration
@EnableWebSocketMessageBroker
public class MyWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
   
   @Override
    public boolean configureMessageConverters(List<MessageConverter> messageConverters) {
        messageConverters.add(new ByteArrayMessageConverter());
        return false;
    }

}

UPDATE

Ah! I see that. Thanks:

public TextMessage(byte[] payload) {
    super(new String(payload, UTF_8));
    this.bytes = payload;
}

From other side from STOMP spec:

The body of a STOMP message must be a String. If you want to send and receive JSON objects, ...

According to the ArrayBuffer:

Getting an array buffer from existing data

  • From a Base64 string
  • From a local file

So, I think you don't have a chioce rather than provide you some custom MessageConverter, which converts your byte[] to Base64 String and send it.

On the JavaScript side you should decode that string to the ArrayBuffer somehow.


Post a Comment for "Is It Possible To Send Binary Data With STOMP Over WebSockets Using Spring-WebSockets?"