Netty入门(三)之web服务器
Netty入门(三)之web服务器
阅读前请参考
有了前两篇的使用基础,学习本文也很简单!只需要在前两文的基础上稍微改动即可!
Maven依赖
<!-- Netty -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.22.Final</version>
</dependency>
一:启动类
关于启动类,需要我们做的就是自定义端口以及继承ChannelInitializer类。
/**
* Netty服务器启动
* Create by yster@foxmail.com 2018-05-04
**/
public class HttpServerStartup {
public void startup() {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workGroup);
b.channel(NioServerSocketChannel.class);
b.childHandler(new MyServerInitializer()); //继承重写类
Channel ch = b.bind(8888).sync().channel(); //自定义端口
ch.closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
//优雅的退出程序
bossGroup.shutdownGracefully();
workGroup.shutdownGracefully();
}
}
}
二:信道初始化
/**
* 信道初始化
* Create by yster@foxmail.com 2018-05-04
**/
public class MyServerInitializer extends ChannelInitializer<SocketChannel> {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
/**
* http-request解码器
* http服务器端对request解码
*/
pipeline.addLast("decoder", new HttpRequestDecoder());
/**
* http-response解码器
* http服务器端对response编码
*/
pipeline.addLast("encoder", new HttpResponseEncoder());
pipeline.addLast("deflater", new HttpContentCompressor());
pipeline.addLast("handler", new MyServerChannelHandler());
}
}
值得一提的是,上面信道的处理对post请求而言不太方便获取参数。
三:绑定处理程序中的信道
/**
* 绑定处理程序中的简单通道
* Create by yster@foxmail.com 2018-05-04
**/
@Sharable
public class MyServerChannelHandler extends SimpleChannelInboundHandler<HttpObject> {
@Override
protected void channelRead0(ChannelHandlerContext ctx, HttpObject msg){
if (msg instanceof HttpRequest) {
//request response都已经获取到!
ByteBuf byteBuf = Unpooled.copiedBuffer("Hello".getBytes()); DefaultFullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1,HttpResponseStatus.OK,byteBuf);
ctx.channel().writeAndFlush(response);
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
ctx.channel().close();
cause.printStackTrace();
}
}
Netty入门(三)之web服务器的更多相关文章
- Tomcat、Apache、IIS这三种Web服务器来讲述3种搭建JSP运行环境的方法
一.相关软件介绍 1. J2SDK:Java2的软件开发工具,是Java应用程序的基础.JSP是基于Java技术的,所以配置JSP环境之前必须要安装J2SDK. 2. Apache服务器:Apache ...
- netty http客户端从web服务器获取消息遇到的HttpChunk问题
有时候,Web服务器生成HTTP Response是无法在Header就确定消息大小的,这时一般来说服务器将不会提供Content-Length的头信息,而采用Chunked编码动态的提供body内容 ...
- 图解HTTP权威指南(三)| Web服务器对HTTP请求的处理和响应
作者简介 李先生(Lemon),高级运维工程师(自称),SRE专家(目标),梦想在35岁买一辆保时捷.喜欢钻研底层技术,认为底层基础才是王道.一切新技术都离不开操作系统(CPU.内存.磁盘).网络 ...
- Apache、Lighttpd、Nginx 三种web服务器对比
简介 1. Apache Apache是世界使用排名第一的Web服务器软件.它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一.Apac ...
- RobotFramework + Python 自动化入门 三 (Web自动化)
在<RobotFramwork + Python 自动化入门 一>中,完成了一个Robot环境搭建及测试脚本的创建和执行. 在<RobotFramwork + Python 自动化入 ...
- Web服务器处理HTTP压缩之gzip、deflate压缩
现如今在处理http请求的时候,由于请求的资源较多,如果不启用压缩的话,那么页面请求的流量将会非常大.启用gzip压缩,在一定程度上会大大的提高页面性能. 目录 一.什么是gzip 二.什么是de ...
- WEB服务器1--开篇
WEB服务器 web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下载.目前最主流的三 ...
- Web服务器原理
——————————什么是Web服务器 Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档.目前最主流的三个Web服务器是Apache Ngin ...
- 各种容器与服务器的区别与联系:Servlet容器、WEB容器、Java EE容器、应用服务器、WEB服务器、Java EE服务器
1.容器与服务器的联系 如上图,我们先来看下容器与服务器的联系:容器是位于应用程序/组件和服务器平台之间的接口集合,使得应用程序/组件可以方便部署到服务器上运行. 2.各种容器的区别/联系 2-1.容 ...
- node(03)--利用 HTTP 模块 URl 模块 PATH 模块 FS 模块创建一个 WEB 服务器
Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文档,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下载.目前最主流的三个 We ...
随机推荐
- 函数纹理(国际象棋棋盘纹理&粗布纹理)MFC
函数纹理(国际象棋棋盘纹理&粗布纹理)MFC实现 源码百度云下载 国际象棋棋盘纹理(效果图见最后) //国际象棋纹理函数 //g(u, v) = a , 向下取整(8u)+向下取整(8v) ...
- (网页)HTML5 Canvas ( 事件交互, 点击事件为例 ) isPointInPath(转)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 根据浏览器内核判断是web/iOS/android/ipad/iphone 来打开不同的网站或页面
纯js,直接分享,直接使用: var browser={ versions:function(){ var u = navigator.userAgent, app = navigator.appVe ...
- Spark算子代码实践
package com.dingxin.datainit import org.apache.log4j.{Level, Logger} import org.apache.spark.sql.Spa ...
- Spark之UDAF
import org.apache.spark.sql.{Row, SparkSession} import org.apache.spark.sql.expressions.{MutableAggr ...
- Integert 与 int例子详解
public final class Integerextends Numberimplements Comparable<Integer> Integer 类在对象中包装了一个基本类型 ...
- H5——简易马祖
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块
feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...
- python字符串处理以及字符串格式化
一.python字符串处理 目录: 1.算长度(len),某个元素出现的次数(count) 2.切片 [ ],repr:把不可见字符显示出来 3.查找 #find,rfind从右边查找 4.字符串 ...
- 监控MySQL或Web服务是否正常
在工作中,我们往往利用脚本定时监控本地.远端数据库服务端或Web服务是否运行正常,例如:负载高.cup高.连接数满了等.... 方法一:根据端口 本地:netstat/ss/lsof ① nets ...