Netty实战读书笔记(第十章)

Netty编码解码器:

在网络应用程序中,需要将字节流转换为应用程序对应需要的数据格式。编码器是将应用程序需要的数据格式转换为字节流,解码器是将字节流转换为应用程序需要的数据格式。

解码器主要有两种:ByteToMessageDecode、MessageToMessageDecode。webSocket实现了browser和server的全双工通信。

import java.util.List;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageCodec;
import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
import io.netty.handler.codec.http.websocketx.WebSocketFrame;
import nia.chapter10.WebSocketConvertHandler.MyWebSocketFrame.FrameType;

/**
 * 实现在一个类中decode和encode。webSocket实现了浏览器和服务器的全双工。
 * @author pc
 *
 */
public class WebSocketConvertHandler extends MessageToMessageCodec<WebSocketFrame , WebSocketConvertHandler.MyWebSocketFrame>{
	
	// 将MyWebSocketFrame 编码为 指定的WebSocketFrame。
	@Override
	protected void encode(ChannelHandlerContext ctx, MyWebSocketFrame msg, List<Object> out) throws Exception {
		// TODO Auto-generated method stub
		ByteBuf data = msg.getData();
		switch(msg.getType()){
		case BINARY: out.add(new BinaryWebSocketFrame(data));break;
		case CLOSE: 
		case PING:
		case PONG:
		case TEXT: out.add(new TextWebSocketFrame(data)); break;
		case CONTINUATION:
		}
		
	}
	// 将WebSocketFrame解码为应用需要的MyWebSocketFrame。
	@Override
	protected void decode(ChannelHandlerContext ctx, WebSocketFrame msg, List<Object> out) throws Exception {
		// TODO Auto-generated method stub
		if (msg instanceof BinaryWebSocketFrame){
			out.add(new MyWebSocketFrame(MyWebSocketFrame.FrameType.BINARY  , msg.content()));
		} else if(msg instanceof TextWebSocketFrame){
			
		}
	}
	
	//声明 WebSocketConvertHandler 所使用的 OUTBOUND_IN 类型,需要将byte和这种类型相互转换。
    public static final class MyWebSocketFrame {
        //定义拥有被包装的有效负载的 WebSocketFrame 的类型
        public enum FrameType {// 枚举类型。
            BINARY,
            CLOSE,
            PING,
            PONG,
            TEXT,
            CONTINUATION
        }
        private final FrameType type;
        private final ByteBuf data;

        public MyWebSocketFrame(FrameType type, ByteBuf data) {
            this.type = type;
            this.data = data;
        }
        public FrameType getType() {
            return type;
        }
        public ByteBuf getData() {
            return data;
        }
    }

	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值