netty 数据压缩 二进制流推送

目录

1 netty 数据压缩推送

1 入参 获取二进制数据

2 出参 二进制流输出(如果要压缩,查看下文,java Gzip压缩再转化成二进制流,注意和前台交互的编码问题)


1 netty 数据压缩推送

netty数据传送方式分别有

TextWebSocketFrame  ---> 文本形式推送

BinaryWebSocketFrame --> 二进制流形式推送

................

1 入参 获取二进制数据

public  String binary(ChannelHandlerContext ctx, WebSocketFrame frame){
		System.out.println("The WebSocketFrame is BinaryWebSocketFrame");
		BinaryWebSocketFrame binaryWebSocketFrame = (BinaryWebSocketFrame) frame;
		
		byte[] by = new byte[frame.content().readableBytes()];
		binaryWebSocketFrame.content().readBytes(by);
		ByteBuf buf = Unpooled.buffer();
		buf.writeBytes(by);
		 String str = "";
		    if(buf.hasArray()) { // 处理堆缓冲区
		        str = new String(buf.array(), buf.arrayOffset() + buf.readerIndex(), buf.readableBytes());
		       
		    } else { // 处理直接缓冲区以及复合缓冲区
		        byte[] bytes = new byte[buf.readableBytes()];
		        buf.getBytes(buf.readerIndex(), bytes);
		        str = new String(bytes, 0, buf.readableBytes());
		    }
		    return str;

	}

2 出参 二进制流输出(如果要压缩,查看下文,java Gzip压缩再转化成二进制流,注意和前台交互的编码问题)

把 new TextWebSocketFrame(msg)  -->  new BinaryWebSocketFrame(msg) 就转成二进制流

//用压缩二进制流的方式写 channel 写入消息
	public static void writeMsgByBinary(ChannelGroup channels, String msg, String channelKey) {
		
		if (channels != null && !channels.isEmpty()) {
			try {
        // String	gzip = GZIPUtils.compress(msg);  //压缩过后再二进制传输
          result.writeBytes(msg.getBytes());
			channels.writeAndFlush(new BinaryWebSocketFrame(result)).addListener(future -> {
				if (!future.isSuccess()) {
					log.error("write error", future.cause());
				}
			});
		} else {
			if (!StringUtil.isNullOrEmpty(channelKey)) {
				subscribersMap.remove(channelKey);
			}
		}
	}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值