ContextHandlerBuilder.java 1.6 KB

1234567891011121314151617181920212223242526272829303132333435
  1. package cn.nosum.gateway.handler.build;
  2. import cn.nosum.common.annotation.Adaptive;
  3. import cn.nosum.gateway.handler.*;
  4. import io.netty.channel.ChannelInitializer;
  5. import io.netty.channel.socket.SocketChannel;
  6. import io.netty.handler.codec.http.HttpObjectAggregator;
  7. import io.netty.handler.codec.http.HttpRequestDecoder;
  8. import io.netty.handler.codec.http.HttpResponseEncoder;
  9. @Adaptive
  10. public class ContextHandlerBuilder implements HandlerBuilder{
  11. private static ChannelInitializer<SocketChannel> channelInitializer=null;
  12. @Override
  13. public ChannelInitializer<SocketChannel> build() {
  14. if (channelInitializer==null){
  15. channelInitializer = new ChannelInitializer<SocketChannel>() {
  16. // 客户端初始化处理
  17. protected void initChannel(SocketChannel client) throws Exception {
  18. // Netty对HTTP协议的封装,顺序有要求
  19. client.pipeline().addLast(new HttpRequestDecoder());
  20. client.pipeline().addLast(new HttpObjectAggregator(65535));//将多个消息转化成一个
  21. client.pipeline().addLast(new HttpResponseEncoder());
  22. client.pipeline().addLast(new FullHttpRequestHandler());
  23. client.pipeline().addLast(new SlotProcessHandler());
  24. // TODO 根据激活扩展点优化
  25. client.pipeline().addLast(new FileProcessHandler());
  26. client.pipeline().addLast(new FinalProcessHandler());
  27. }
  28. };
  29. }
  30. return channelInitializer;
  31. }
  32. }