- 浏览: 985475 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (826)
- 硬件 (8)
- 软件 (24)
- 软件工程 (34)
- JAVA (229)
- C/C++/C# (77)
- JavaScript (8)
- PHP (1)
- Ruby (3)
- MySQL (14)
- 数据库 (19)
- 心情记事 (12)
- 团队管理 (19)
- Hadoop (1)
- spring (22)
- mybatis(ibatis) (7)
- tomcat (16)
- velocity (0)
- 系统架构 (6)
- JMX (8)
- proxool (1)
- 开发工具 (16)
- python (10)
- JVM (27)
- servlet (5)
- JMS (26)
- ant (2)
- 设计模式 (5)
- 智力题 (2)
- 面试题收集 (1)
- 孙子兵法 (16)
- 测试 (1)
- 数据结构 (7)
- 算法 (22)
- Android (11)
- 汽车驾驶 (1)
- lucene (1)
- memcache (12)
- 技术架构 (7)
- OTP-Erlang (7)
- memcached (17)
- redis (20)
- 浏览器插件 (3)
- sqlite (3)
- Heritrix (9)
- Java线程 (1)
- scala (0)
- Mina (6)
- 汇编 (2)
- Netty (15)
- libevent (0)
- CentOS (12)
- mongod (5)
- mac os (0)
最新评论
-
kingasdfg:
你这里面存在一个错误添加多个任务 应该是这样的 /** * ...
Quartz的任务的临时启动和暂停和恢复【转】 -
kyzeng:
纠正一个错误,long型对应的符号是J,不是L。
Jni中C++和Java的参数传递 -
zhaohaolin:
抱歉,兄弟,只是留下作记录,方便学习,如果觉得资料不好,可以到 ...
netty的个人使用心得【转】 -
cccoooccooco:
谢谢!自己一直以为虚机得使用网线才可以与主机连接呢。。
主机网卡无网线连接与虚拟机通信 -
yuqilin001:
要转别人的东西,请转清楚点嘛,少了这么多类,误人子弟
netty的个人使用心得【转】
通常我们会在众多的J2EE标准的基础上来构建自己的Java WEB应用,比如最常见的Servlet。这样写出来的程序可以在所有符合J2EE标准的WEB服务器上运行,比如Tomcat,JBoss等等。事实上大多数Java WEB项目也正是采用这种架构,这么做有很多很多好处。但是这么做也有一些问题,J2EE标准和J2EE服务器隐藏了大部分的HTTP底层消息处理细节,如果你的应用不需要利用的众多J2EE特性,或者需要一个严苛的性能要求,又或者希望可以自己处理一些HTTP底层,那么可以考虑采用内嵌的JAVA HTTP服务器,这些Embedded Java Http Server主要包括了:
- Netty,采用NIO,它来自JBoss,部分实现了zero-copy,而且文档和例子充足;
- Grizzly,GlassFish V3的内核。
- AsyncWeb,基于Apache Mina作为底层的NIO框架,性能不错,但是好像不更新了。
Apache Mina找不到打包好的代码,你似乎只能通过SVN来获得了,svn checkout http://svn.apache.org/repos/asf/mina/asyncweb/trunk。
所有这些内嵌服务器都可以方便的嵌入到你的Java应用中,并且体积小巧,可以通过编程的方法详细的控制从Http消息的全部生存周期。更加优秀的是它们的新能,采用NIO或者Temp Selector(Grizzly),它们的处理速度已经比tomcat这种“庞然大物”高出许多,在应用中你了解并且可以控制所有底层到高层的细节,这让后期的优化更加容易。当然,代价是你必须放弃J2EE带来的许多方便的特性,比如Servlet,数据源等等。如果你用过Playframework的话,就会了解到Servlet并不是最好的Java WEB架构(最起码不是“唯一”),而且体会到摆脱那些既有的J2EE标准的好处,现在playframework采用了Netty作为它的底层HTTP服务器。
Netty
Netty比其它两个更加“易于入门”,因为它有很多的文档和充足的例子,并且经过简单的代码,你就可以立即获得一个HTTP服务器。Playframework采用了Netty作为它的底层HTTP服务器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
public class NettyServer { public static int httpPort; public static int httpsPort; public static void main(String[] args) throws Exception { new NettyServer(args);//new 操作即是启动服务器的方法 } public NettyServer(String[] args) { System.setProperty("file.encoding", "utf-8"); httpPort = 8000; ServerBootstrap bootstrap = new ServerBootstrap( new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool())); try { bootstrap.setPipelineFactory(new HttpChannelPipelineFactory());//应用的业务逻辑接入点 bootstrap.bind(new InetSocketAddress(httpPort)); } catch (ChannelException e) { Logger.error("Could not bind on port " + httpPort, e); System.exit(-1); } } } |
Grizzly
Grizzly宣称自己的框架性能最好,它也是GlassFish的Http引擎(不过GlassFish我用着到不怎么好…)。
下面这个是Playframework grizzly module的一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
public class Server { final GrizzlyWebServer ws; public Server(File applicationDir) { Properties p = Play.configuration; int httpPort = 80; httpPort = Integer.parseInt(System.getProperty("http.port")); ws = new GrizzlyWebServer(httpPort); ws.useAsynchronousWrite(true); ws.addGrizzlyAdapter(new PlayGrizzlyAdapter());//PlayGrizzlyAdapter是应用业务逻辑接口 try { ws.start();//启动服务器,监听Http请求 } catch (IOException e) { Logger.error("Could not bind on port " + httpPort, e); ws.stop(); System.exit(-1); } } public static void main(String[] args) throws Exception { File root = new File(System.getProperty("application.path")); new Server(root, System.getProperty("play.id", "")); } } |
AsyncWeb
这个项目好长时间不更新了,原来playframework是用AsyncWeb作为HTTP服务器的,但是最近改成了Netty。AsyncWeb和其它两个框架最不同的地方就是它可以采用Tomcat Native APR驱动底层socket接收框架,由于APR是一种本地库,可能更加有性能优势吧(没测试)。AsyncWeb是基于著名的Java NIO框架Apache Mina的,虽然AsyncWeb的文档很少,但是Mina的文档却很充足,如果你对Mina熟悉的话,AsyncWeb那300多KB的代码很容易阅读,或者定制。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
public class Main { public static void main(String[] args) throws Exception { SocketAcceptor acceptor = new NioSocketAcceptor();//可以选择别的acceptor,比如APR acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new HttpCodecFactory())); acceptor.setReuseAddress(true); acceptor.getSessionConfig().setReuseAddress(true); acceptor.getSessionConfig().setReceiveBufferSize(1024); acceptor.getSessionConfig().setSendBufferSize(1024); acceptor.getSessionConfig().setTcpNoDelay(true); acceptor.setHandler(new HttpProtocolHandler());//实现自己的HTTP处理类,应用的接入点 acceptor.bind(new InetSocketAddress(9012));//启动服务器,监听Http请求 } } |
采用 知识共享署名-非商业性使用 3.0 Unported许可协议 进行许可
本文标题:使用内嵌的HTTP服务器构建Java WEB应用
永久链接: http://blog.cogipard.org/articles/more-flexiable-java-web-with-embedded-server
发表评论
-
Reactor模式和NIO<转>
2013-05-27 14:20 838本文可看成是对Doug Lea Scalable IO in ... -
Netty代码分析【转】
2011-09-28 15:40 918Netty提供异步的、事件驱动的网络应用程序框架和工具,用 ... -
使用netty 作为 http服务器【转】
2011-09-22 17:45 2795netty是继mina之后一个非常受欢迎的nio网络框架(其实 ... -
netty的粘包 解包问题【转】
2011-09-22 00:16 1648view plain 1、简介 ... -
netty和 procolbuffers结合使用【转】
2011-09-22 00:14 2826ProtocolBuffer是用于结构化数据串行化的灵活、 ... -
netty的个人使用心得【转】
2011-09-22 00:13 3833Netty是由JBOSS提供的一个java开源框架。Net ... -
netty心跳代码【转】
2011-09-22 00:12 4031类:ServerNIOHandler 别看名字是server它 ... -
通过 AtomicIntegerArray 或 AtomicInteger做简单的洪流控制【转】
2011-09-22 00:00 2169在设计系统的时候,为了防止雪崩效应我们都需要加入一些洪流控 ... -
Netty服务器线程模型概览【转】
2011-09-21 23:57 2324一切从ServerBootstrap开始 ServerBoo ... -
Netty NIO 框架性能压测-短链接-对比Tomcat【转】
2011-09-21 23:51 2179压测方案 准备多个文件大小分别为 1k 10k 100k ... -
Netty NIO 框架性能压测 – 长链接【转】
2011-09-21 23:50 1796压测准备 需要将ulimit -n 改大,否则nio链接开 ... -
Netty学习笔记(一)二进制流协议【转】
2011-09-21 23:40 2868一、协议 1. 请求: 字段 ... -
Netty实现原理浅析【转】
2011-09-21 12:53 910Netty是JBoss出品的高效 ... -
Netty使用初步【转】
2011-09-21 12:52 9591、简介 Java1.4提供了NIO使开发者可以使用Jav ...
相关推荐
使用构建工具 如何在Maven中使用Jetty 如何在Ant中使用Jetty Maven和Ant的更多支持 Jetty Maven插件(Plugin) Jetty Jspc Maven插件(Plugin) Maven web应用工程原型 Ant Jetty插件(Plugin) 使用集成开发环境...
创建一个非web(non-web)应用 ii. 63. 属性&配置 i. 63.1. 外部化SpringApplication配置 ii. 63.2. 改变应用程序外部配置文件的位置 iii. 63.3. 使用'short'命令行参数 iv. 63.4. 使用YAML配置外部属性 v. 63.5. ...
这门课程的前导课程是《C语言》、《XX页制作》和《计算机XX络》,所以它一般放在第三或第四个学期开设,后续课程是面向服务器编程《JSP》、面向Web通信的《J2EE》、面向移动通信《J2ME》。 3.《Jv程序设计》的课程...
总的来说,Spring Boot提供了快速开发、简化配置、内嵌服务器、增强生命周期、监控和管理等功能,是用于构建现代化Java应用程序的理想框架。 Vue是用于构建前端页面的一套相当好用的渐进式JavaScript框架,与其他...
它支持自动配置、内嵌Web服务器等功能,使得开发者可以专注于业务逻辑的实现。 MySQL:作为项目的数据库管理系统,用于存储用户信息、交友需求等数据。MySQL具有较高的性能和稳定性,适合用于构建大型网站。 功能...
但是对于胖客户端Web应用来说,比如Java applet、AJAX,由于客户端内嵌了大量的逻辑处理,耗费的时间有可能很长,从而成为系统的瓶颈,这是要注意的一个地方。 那么客户感受的响应时间其实是等于客户端响应时间+...
SpringBoot的主要优点包括:可以快速创建独立运行的Spring项目、内嵌web服务器、方便做web集成等。 前端部分主要包括两部分:微信小程序和后台管理界面。微信小程序使用微信开发者工具进行开发,主要用于用户端的...
GCF 谷歌内嵌浏览器框架, 使用此插件,用户可以通过Internet Explorer的用户界面,以Chrome内核的渲染方式浏览网页。Chrome Frame 会把最新版的Chrome Webkit 内核和JavaScript 引擎注入到IE中, IE浏览器将获得...
使用容器发布事件 Spring高级话题 Spring Aware BeanNameAware BeanFactoryAware ApplicationContextAware MessageSourceAware ApplicationEventPublisherAware ResourceLoaderAware 多...
用于ssh${your machine username}cachecloud.machine.password服务器密码,用于ssh${your machine password}web.portspring-boot内嵌tomcat启动端口80803、启动cachecloud系统 mvn spring-boot:run1. 构建:mvn -...
我创建的应用程序有HTML编辑器、EMAIL比用户接口程序、Web服务器以及用户数据库,我们的商务应用就建立在它们的基础上。这些经历在本书中有所反映。本书的大部分内容是有关Tcl脚本编程的,而有关使用C语言来创建Tcl...
| Web服务器 | SpringBoot内嵌的Tomcat | | 数据库 | MySQL 5.7 | ## 运行步骤 1. 数据库导入,新建数据库exam,将`exam.sql`文件导入并运行。 2. 打开项目,打开`src/main/resources/baseApplication.yaml`,修改...
第六章 类 型 转 换 .48 6.1 隐式类型转换 .48 6.2 显式类型转换 .53 6.3 小 结 .56 第七章 表 达 式 .58 7.1 操 作 符 .58 7.2 算术操作符和算术表达式.59 7.3 赋值操作符和赋值表达式.64 7.4 关系...
现如今,基于Java的网站开发明显过于复杂,...一个内嵌的且已配置为热部署的Tomcat服务器 Spring的依赖注入技术 使用Spring的MessageSource实现国际化(i18n) 一个基于Spring事务抽象的事务层 借助功能强大的Groovy
Java EE 框架..................................................................................................................................................................................1 ...