Netty 整合 SpringFramework 代码示例。
启动类代码:
package cn.ranko.api; import cn.ranko.framework.core.RankoServer; /** * Created by zhujun on 2016/8/11. * * 测试地址:http://localhost:8200/api-demo/test.action * 内容返回:{"demoId":1,"demoStr":"test1"} * */ public class ApiServer { private static RankoServer server; public static void main(String[] args) throws Exception { int serverPort = Integer.parseInt(args.length > 0 && args[0] != null ? args[0] : "8200"); server = new RankoServer(serverPort); server.start(); } }
整合代码:
package cn.ranko.framework.core; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpRequestDecoder; import io.netty.handler.codec.http.HttpResponseEncoder; import io.netty.handler.stream.ChunkedWriteHandler; import org.apache.log4j.Logger; import org.springframework.mock.web.MockServletContext; import javax.servlet.ServletException; /** * Created by zhujun on 2016/6/20. */ public class RankoServer { private Logger logger = Logger.getLogger(getClass().getName()); private int serverPort; private ServerBootstrap bootstrap; public RankoServer(int serverPort) { this.serverPort = serverPort; } public void start() throws InterruptedException, ServletException { if (this.bootstrap != null) { throw new IllegalStateException("Server is started, please do not repeat"); } bootstrap = new ServerBootstrap(); ApplicationContextHolder.init(); bootstrap.group(new NioEventLoopGroup(), new NioEventLoopGroup()).channel( NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { ChannelPipeline pipeline = socketChannel.pipeline(); pipeline.addLast("decoder", new HttpRequestDecoder()); pipeline.addLast("aggregator", new HttpObjectAggregator(65536)); // 上传限制3M pipeline.addLast("encoder", new HttpResponseEncoder()); pipeline.addLast("chunkedWriter", new ChunkedWriteHandler()); pipeline.addLast("handler",new DispatcherServletHandler(ApplicationContextHolder.getDispatcherServlet())); } }); ChannelFuture f = bootstrap.bind(this.serverPort).sync();// 配置完成,开始绑定server,通过调用sync同步方法阻塞直到绑定成功 f.channel().closeFuture().sync();// 应用程序会一直等待,直到channel关闭 logger.info("server listens to port " + this.serverPort); } }