package com.pekall.pctool; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFactory; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.Channels; import org.jboss.netty.channel.group.ChannelGroup; import org.jboss.netty.channel.group.ChannelGroupFuture; import org.jboss.netty.channel.group.DefaultChannelGroup; import org.jboss.netty.channel.socket.oio.OioServerSocketChannelFactory; import org.jboss.netty.handler.codec.http.HttpRequestDecoder; import org.jboss.netty.handler.codec.http.HttpResponseEncoder; import java.net.InetSocketAddress; import java.util.concurrent.Executors; public class MainServer { private static final int SERVER_PORT = 12580; private ChannelGroup mAllChannels; private ChannelFactory mFactory; private volatile boolean mIsAlive; private static class ServerPipelineFactory implements ChannelPipelineFactory { public ChannelPipeline getPipeline() throws Exception { // Create a default pipeline implementation. ChannelPipeline pipeline = Channels.pipeline(); pipeline.addLast("decoder", new HttpRequestDecoder()); pipeline.addLast("encoder", new HttpResponseEncoder()); // http处理handler pipeline.addLast("handler", new MainServerHandler(new FakeBusinessLogicFacade())); return pipeline; } } public boolean isAlive() { return mIsAlive; } public synchronized void start() { Slog.d("start E, port = " + SERVER_PORT); mAllChannels = new DefaultChannelGroup("main-server"); mFactory = new OioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool()); // 配置服务器-使用java线程池作为解释线程 ServerBootstrap bootstrap = new ServerBootstrap(mFactory); // 设置 pipeline factory. bootstrap.setPipelineFactory(new ServerPipelineFactory()); // 绑定端口 Channel channel = bootstrap.bind(new InetSocketAddress(SERVER_PORT)); mAllChannels.add(channel); mIsAlive = true; Slog.d("start X"); } public synchronized void stop() { Slog.d("stop E"); ChannelGroupFuture future = mAllChannels.close(); future.awaitUninterruptibly(); mFactory.releaseExternalResources(); Slog.d("stop X"); } public static void main(String[] args) { new MainServer().start(); } }