package com.taobao.zeus.socket.master; import static org.jboss.netty.channel.Channels.pipeline; import java.net.InetSocketAddress; import java.util.List; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelHandler; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.handler.codec.protobuf.ProtobufDecoder; import org.jboss.netty.handler.codec.protobuf.ProtobufEncoder; import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32FrameDecoder; import org.jboss.netty.handler.codec.protobuf.ProtobufVarint32LengthFieldPrepender; import com.taobao.zeus.schedule.mvc.ScheduleInfoLog; import com.taobao.zeus.socket.protocol.Protocol; public class MasterServer{ // Server服务启动器 private ServerBootstrap bootstrap; private ChannelPipelineFactory pipelineFactory; public MasterServer(final ChannelHandler handler){ NioServerSocketChannelFactory channelFactory= new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); bootstrap=new ServerBootstrap(channelFactory); pipelineFactory=new ChannelPipelineFactory(){ private final ProtobufVarint32LengthFieldPrepender frameEncoder = new ProtobufVarint32LengthFieldPrepender(); private final ProtobufEncoder protobufEncoder = new ProtobufEncoder(); public ChannelPipeline getPipeline() throws Exception { ChannelPipeline p = pipeline(); p.addLast("frameDecoder", new ProtobufVarint32FrameDecoder()); p.addLast("protobufDecoder",new ProtobufDecoder(Protocol.SocketMessage.getDefaultInstance())); p.addLast("frameEncoder", frameEncoder); p.addLast("protobufEncoder", protobufEncoder); p.addLast("handler", handler); return p; } }; try { bootstrap.setPipeline(pipelineFactory.getPipeline()); } catch (Exception e) { e.printStackTrace(); } } public synchronized void start(int port){ bootstrap.bind(new InetSocketAddress(port)); ScheduleInfoLog.info("netty server start"); } public synchronized void shutdown(){ bootstrap.releaseExternalResources(); ScheduleInfoLog.info("netty server shutdown"); } }