- 授权协议: GPL
- 开发语言: Java
- 操作系统: 跨平台
- 软件首页: http://git.oschina.net/xmtom/share/tree/master/netty_springmvc
- 软件文档: http://bbs.ranko.cn/forum-5.htm
软件介绍
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);
}
}
python学习手册(原书第5版)
马克·卢茨 / 机械工业出版社 / 2018-10 / 219
如果你想动手编写高效、高质量并且很容易与其他语言和工具集成的代码,本书将快速地帮助你利用Python提高效率。本书基于Python专家的流程培训课程编写,内容通俗易懂。本书包含很多注释的例子和插图,以帮助你开始使用Python2.7和3.3。每章都包含关于Python语言的重要组成部分的一节课。本书主要内容:了解Python的主要内置对象类型,如数字、列表和字典;创建和处理对象的Python语句,......一起来看看 《python学习手册(原书第5版)》 这本书的介绍吧!
