框架背景:

前期为公司项目做全链路压测,发现公司跑到tomcat上的服务,即使是最简单的方法QPS也就到3000左右,后期查询发现可能和tomcat的业务逻辑有关。

因为以前在项目开发中用netty做过即时聊天的项目,对netty也比较熟,就有了想用netty做一个web框架的想法。

框架应用:

本框架没有页面渲染功能,适用于c/s结构的服务端开发。比较适用于当前比较流行的APP服务端开发。

性能:

同样的功能用springboot和netty相比,QPS大概是前者3.5倍左右。

Springboot压测结果截图(QPS平均在1万左右):

本框架压测结果截图:(QPS平均在3.8万)

主要技术:
 
Netty 4.1.6, 
Spring 4.3.2.RELEASE
mybatis

Mysql

项目结构:

入口函数:

/**
* Created by 老包子 on 2017/3/22.
* netty web 项目启动入口
*/
public class NettyApplicationEntrance { private static final Logger logger = Logger.getLogger(NettyApplicationEntrance.class); public static final boolean SSL = System.getProperty("ssl") != null;
static final int PORT = Integer.parseInt(System.getProperty("port", SSL? "8443" : "8080")); @Autowired
WebSocketServerInitializer webSocketServerInitializer; public void init() throws InterruptedException {
// Configure SSL.
final SslContext sslCtx = null;
EventLoopGroup bossGroup = new NioEventLoopGroup(4);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(webSocketServerInitializer); Channel ch = b.bind(PORT).sync().channel(); System.out.println("Open your web browser and navigate to " +
(SSL? "https" : "http") + "://127.0.0.1:" + PORT + '/'); ch.closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
} public static void main(String[] args) throws InterruptedException {
String[] configurations = { "config/applicationContext.xml","config/applicationContext-netty.xml"}; ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext(configurations); logger.info("-------------------------------------------");
logger.info("start nettyContainer....");
logger.info("--------------------------------------------");
}

访问截图(这是一个静态方法):

另外还有一个关于数据库的访问demo, 需要配置好数据库,并导入表结构和数据.

访问URL:

localhost:8080/api?service=city&action=list

SQL如下:

DROP TABLE IF EXISTS `city`;

CREATE TABLE `city` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT,

  `cityname` varchar(20) CHARACTER SET utf8 DEFAULT NULL,

  `pinying` varchar(20) DEFAULT NULL,

  `status` tinyint(1) DEFAULT NULL,

  PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1;

INSERT INTO `city` VALUES ('', '杭州', 'hangzhou', '');

INSERT INTO `city` VALUES ('', '上海', 'shanghai', '');

INSERT INTO `city` VALUES ('', '北京', 'beijing', '');

源码已上传到githup, 有兴趣的同学可以弄下来看看,但不保证在生产环境运行稳定。

https://github.com/Jim201314/netty_web_framework

Netty高性能web框架

Netty高性能web框架的更多相关文章

  1. 实现基于netty的web框架,了解一下

    上一篇写了,基于netty实现的rpc的微框架,其中详细介绍netty的原理及组件,这篇就不过多介绍 这篇实现基于netty的web框架,你说netty强不强,文中有不对的地方,欢迎大牛指正 先普及几 ...

  2. 彩虹女神跃长空,Go语言进阶之Go语言高性能Web框架Iris项目实战-项目入口与路由EP01

    书接上回,我们已经安装好Iris框架,并且构建好了Iris项目,同时配置了fresh自动监控项目的实时编译,万事俱备,只欠东风,彩虹女神蓄势待发.现在我们来看看Iris的基础功能,如何编写项目入口文件 ...

  3. Netty高性能网络应用框架对标P7面试题分享v4.1.70.Final

    概述 **本人博客网站 **IT小神 www.itxiaoshen.com 定义 Netty官网 https://netty.io/ 最新版本为4.1.70.Final Netty是一个异步的.事件驱 ...

  4. python 高性能web框架 gunicorn+gevent

    参考链接: http://rfyiamcool.blog.51cto.com/1030776/1276364/ http://www.cnblogs.com/nanrou/p/7026789.html ...

  5. 急如闪电快如风,彩虹女神跃长空,Go语言高性能Web框架Iris项目实战-初始化项目ep00

    在Golang Web编程的世界里,君不言高性能则已,言高性能必称Iris.彩虹女神的名号响彻寰宇.名动江湖,单论一个快字,无人能出其右,就连以简洁轻量著称于世的Gin也难以望其项背,只见彩虹女神Ir ...

  6. 高性能Web框架

    不管 Web 前端架构运行机制还是 Web 后端架构中,网络是必不可少的且占分量很重.用户通过网络访问 Web 服务器,Web 后端架构中各种服务之间通过网络来进行通信和协作,网络是现代 Web 应用 ...

  7. 高性能Web框架Zend Framework

    Zend Framework (ZF)是用 PHP 5.3及更高版本来开发 Web 程序和服务的开源框架.ZF用100% 面向对象编码实现. ZF的组件结构独一无二,每个组件几乎不依靠其他组件.这样的 ...

  8. erlang 一个高性能web框架 Cowboy 的使用笔记

    环境:ubuntu_server 1210 目的:构建web版hello world程序 参考链接:http://roberto-aloi.com/blog/2013/07/13/create-dep ...

  9. [转]nginx+fastcgi+c/c++搭建高性能Web框架

    FROM : http://blog.csdn.net/marising/article/details/3932938 1.Nginx 1.1.安装 Nginx 的中文维基 http://wiki. ...

随机推荐

  1. [转] CentOS7 用 kubeadm 快速安装 Kubernetes v1.13.4 最新教程

    [转 + 编辑][From] https://www.jianshu.com/p/4d61f18bc62d  , https://www.jianshu.com/p/5ff6e26d1912 时间是2 ...

  2. Kali/Ubuntu无法和物理机之间复制粘贴解决办法

    Vmware安装Linux,传统的vmtools已经被抛弃,当前建议使用Open-VM-tools 安装Open-VM-tools//Kali,Ubuntu: sudo apt install Ope ...

  3. xilinx DMA IP核(二) —— 文档阅读

    本笔记不记录DMA的Scatter/Gather特性.DMA上有三种总线:AXI4-LIte(对寄存器进行配置),AXI4-Memory Map(用于与内存交互)和AXI4 Stream(用于与外设交 ...

  4. Jenkins 源代码编译

    最近一直想写一个关于 Jenkins 管理的 InelliJ 插件,但是尝试很多次总是在登录认证上面失败,各种办法都不起作用,而且官方的文档含糊不清,就动起了从源代码编译在开发环境中进行调试. 废话少 ...

  5. (7.0 version)当销售单中包含service或phantom类型的产品时,销售单不能完成的原因分析及解决方案

    首先说一下service类型的产品,由于该类型的产品不需要发货,所以当在销售订单确认了后,销售单直接变成了等待开票的状态,但当开票的流程结束后,订单却还是停在销售单的状态上,该问题的解决方案是安装Ta ...

  6. SQL1042C running a fenced routine (stored procedure/UDF)

    Relation to this link http://www-01.ibm.com/support/docview.wss?uid=swg21399105 2015-01-11-13.38.19. ...

  7. SymbolTable

    在ClassReader中有两个重要的属性,如下定义: /** A hashtable containing the encountered top-level and member classes, ...

  8. JavaScript设计模式-21.命令模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Linux-socket使用

    socket 产生的原因 进程通信的概念最初来源于单机系统.由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如 UNIX ...

  10. WPF中Window的ShowInTaskbar、Owner和Topmost属性

    1. ShowInTaskbar:设置窗口是否在任务栏上有一席之位,默认为true, 当在父窗口上新开一个子窗口时,任务栏上就会出现两个窗口,所以当要实现 不管开启多少个窗口,在任务栏上都只显示一个窗 ...