我无法通过客户端 websocket 发送二进制消息。
我们有自己的消息对象以及 to/from 二进制文件。所以我创建了一个扩展 ByteToMessageCodec 的类。对 channel.writeAndFlush(MyMessageInstance) 的调用进入编码,它获取 byte[] 并调用 out.writeBytes(byteArray)。
当我调用 channel.writeAndFlush() - 它进入/退出编码,但它似乎永远不会在线上。
下面是通道管道初始化。MessageHandler 只是一个接受我们的 MessageType 的 SimpleInboundHAndler。请注意:我使用 WebSocketClientProtocolHandler 作为升级握手等的手段。
在此先感谢您的任何建议,
鲍勃
boolean handleCloseFrames = false;
WebSocketClientHandshaker handshaker = WebSocketClientHandshakerFactory.newHandshaker(serverUri, WebSocketVersion.V13, null, false, null);
final WebSocketClientProtocolHandler wsHandler = new WebSocketClientProtocolHandler(handshaker, handleCloseFrames);
this.getBootstrap().handler(new ChannelInitializer<SocketChannel>()
{
@Override
public void initChannel(SocketChannel ch) throws Exception
{
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("http-codec", new HttpClientCodec());
pipeline.addLast("aggregator", new HttpObjectAggregator(65536));
pipeline.addLast("ws-handler", wsHandler);
pipeline.addLast("message-codec", new CustomMessageCodec());
pipeline.addLast("message-handler", messageHandler);
}
});
ChannelFuture future = this.getBootstrap().connect(serverUri.getHost(), serverUri.getPort());
channel = future.sync().channel();