如何使用spring boot websocket发送二进制文件?

zhu*_*chu 1 java websocket spring-boot

在其他spring平台上,我使用websocket发送二进制消息,如下所示:

  ByteBuffer bf = ByteBuffer.wrap(bytes);
  old.getBasicRemote().sendBinary(bf);
Run Code Online (Sandbox Code Playgroud)

但是使用spring-boot,我使我的类扩展了TextWebSocketHandler.但是在该方法中handleTextMessage(WebSocketSession session, TextMessage message),只有param WebSocketSession并且它没有发送二进制的方法.

我尝试使用BinaryMessage,如下所示:

session.sendMessage(new BinaryMessage(bytes));
Run Code Online (Sandbox Code Playgroud)

但是客户端得到的结果是Blob(js类型),我不知道该做什么......

wco*_*ong 7

您可以使用BinaryWebSocketHandler来处理二进制消息通信.

完整的例子

@Configuration
@EnableAutoConfiguration
@EnableWebSocket
public class AppWebSocket {

    public static void main(String[] args) {
        SpringApplication.run(AppWebSocket.class, args);
    }

    @Component
    public static class MyWebSocketConfigurer implements WebSocketConfigurer {

        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(new MyTextHandler(), "/text").withSockJS();
            registry.addHandler(new MyBinaryHandler(), "/binary").withSockJS();
        }
    }

    @Component
    public static class MyTextHandler extends TextWebSocketHandler {
        public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
            session.sendMessage(new TextMessage("hello world"));
        }
    }

    @Component
    public static class MyBinaryHandler extends BinaryWebSocketHandler {
        public void handleBinaryMessage(WebSocketSession session, BinaryMessage message) {
            try {
                session.sendMessage(new BinaryMessage("hello world".getBytes()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)