序言:
如果天空是黑暗的
那么我么就摸黑生存
如果发出声音是危险的
那我们就选择沉默
如果自觉无力发光
那我们就蜷伏于墙角
但不要习惯了黑暗
就为黑暗辩护
我们可以卑微如尘土
但不可扭曲如蛆虫
走下去
继续发着光
那些杀不死你的
都会使你变得更强大
Cast a cold eye, on life, on death
正文:
我认为学好一个技术十分重要,有利于自信的培养
不光可以开发服务端的,也可以开发客户端的,这一点十分重要。
Netty优越性很大,我们都认为快速,轻松与可维护性、性能并不矛盾,netty就很好的诠释了这个道理~
首先:客户端如何书写
package com.blackking.netty.firsttest;
/*只要我们书写代码,就会自动导入需要的包,但前提条件是要配置好~,开发人员懂得*/
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoop;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
public class TestServer {
public static void main(String[] args) throws Exception{
/*下面我们定义两个事件循环组,铭记这个概念,是比较重要的~*/
/* NioEventLoopGroup其实就是一个死循环,这一点可以联系到tomcat
* 所以我们要知道,对于服务器的编程,一定会存在一个死循环,这是不可避免的~~
* 帅气,当然我们可以采用一些优雅退出的方式,使得循环可以终止
* 有的人会问,为什么下面是用两个线程组,一个不行么,但是netty推荐使用两个,这就很尴尬~~*/
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try{ /* 下面这个是服务启动的语法,已经进行了封装,使得我们可以较为轻松的启动服务器端的代码~~*/
ServerBootstrap serverBootstrap = new ServerBootstrap();
/* 下面这种方法就是接受两个参数的,要学会~*/
// 用到一个管道~NioServerSocketChannel,这个也要认真学习一下
// NioServerSocketChannel.class(这个有点意思)其实这个实类的创建是通过反射来创建的
serverBootstrap.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).
childHandler(new TestServerinitializer());
// 子处理器childHandler,嘿嘿,我们先定义为一个null值~
// childHandler(new TestServerinitializer()) 原本里面是null,后来我们因为需求换了一下~~
//最后我们开发人员需要绑定到某一个端口,这一点十分重要~~
ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
// 之后我们书写一个代码,进行关闭
channelFuture.channel().closeFuture().sync();
}finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
Netty关注一个端口号,并且底层基于tcp的带链接的协议
精华部分:我的学习认识
- netty可以作为一个http的服务器,处理我们的请求和响应~
- 和我们用web框架编写一个web程序有点像
- 但是我们要记住netty并没有实现servelt标准~因为servelt是一种规范
- 我们可以获取请求当中所获取的参数~
- Springmvc也是对servelt的一种封装,比如说参数绑定之类的~,绑定请求响应的参数即可,但是netty完全不是这样的~
- 使用netty进行开发的时候,我们要忘掉springmvc,忘掉之前的所有东东,重新开始~
Netty是提供的自己的一种方式,而这种方式比起servelt更为底层~
因为他的高并发,所以对于量大的请求,处理起来更加游刃有余。
- Springmvc,tomcat这种开发效率很高的,因为底层的东东都已经写好了,我们只要写一类,然后”填坑就行了”,就像做选择题,把一些东西填进去~
- 可以说,netty对于请求路由都没有一个较为清楚的方式