何为丢弃服务(Discard Protocol),丢弃服务就是一个协议,是最简单的协议,它的作用是接受到什么就丢弃什么,它对调试网路状态有一定的用处。基于TCP的丢弃服务,服务器实现了丢弃丢弃协议,服务器就会在TCP端口9检测丢弃协议请求,在建立连接后并检测到请求后,就直接把接受到数据丢弃,而不响应用户,直到用户断开连接。

NIO核心:

缓冲区:buffer 包含要写入或者是要读出的数据。

通道:channel  通过它读取和写入数据 它就像自来水管一样  通过Channel读取和写入。

多路复用器(选择器):Selector  提供选择已经就绪的任务的能力

1:编写一个处理器(Handler)handler是由netty生成用来处理I/O事件的

// ChannelInBoundHandlerAdapter   ChannelInBoundHandlerAdapter是ChannelInBoundHandler的一个简单实现  默认情况下不会做任何处离 只
//是简单的将操作通过fire*方法传递到channelPipeline(channelPipeline是channelHandler的容器 它负责channelHandler的管理和事件拦截和
//调度)中的下一个channelHandler中让链中的下一个ChannelHandler去处理。注意:信息经过ChannelRead方法处理之后不会自动释放(因为信息不会
//被自动释放所以能将消息传递给下一个ChannelHandler处理)。 //丢弃收到的数据
public class DiscardServerHandler extends ChannelInBoundHandlerAdapter{ @Override
public void channelRead(ChannelHandlerContext ctx,Object msg){
//将数据放入缓冲中
Bytebuffer in = (Byte) msg; //将收到的数据打印出来
try{
while(in.isReadable()){ Systen.out.print((char) in.readByte());
//强制请求清空缓冲区 让I/O系统立即完成它应该完成的输入/输出动作
System.out.flush();
}
}finallly{
//因为bytebuffer 是一个引用计数对象 这个对象必须显示的调用release()方法来实现 而处理器的职责是释放所有传递到处理器的引用
//计数对象 ((BytBuf) msg).realse(); } }
//异常处理
@Override
public void exception(ChannelHandlerContext ctx, Throwable cause){ //当出现异常就关闭连接 cause.printStackTrace();
ctx.close();
} }

2:编写一个main方法来启动服务端的DiscardServerHandler

//丢弃任何进入的数据

public class DiscardServer{

    //端口
private int port;
public DiscardServer(int port) {
this.port = port;
}
public void run throws Exception(){
//NioEventLoopGroup 是用来处理I/O操作的多线程事件循环器 NioEventLoopGroup 会被使用。Netty 提供了许多不同的 EventLoopGroup
//的实现用来处理不同的传输。第一个经常被叫做‘boss’用来接收进来的
//连接。第二个经常被叫做‘worker’,用来处理已经被接收的连接,一旦‘boss’接收到连接,就会把连接信息注册到‘worker’上。
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
//ServerBootstrap 是一个启动 NIO 服务的辅助启动类。
ServerBootstrap b = new ServerBootstrap();
//ChannelInitializer 是一个特殊的处理类,他的目的是帮助使用者配置一个新的 Channel。
//ption() 是提供给NioServerSocketChannel 用来接收进来的连接。
//childOption() 是提供给由父管道 ServerChannel 接收到的连接。 b.group(bossGroup,workerGroup).channel(NioServerSocketChannel.class).childHandler
(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch){
ch.pipeline().addLast(new DiscardServerHandler());
}
}).option(ChannelOption.SO_BACKLOG,128).childOption(ChannelOption.SO_KEEPALIVE,true);
/**
* 绑定端口 开始接收进来的连接
*/
ChannelFuture f = b.bind(port).sync();
f.channel().closeFuture().sync();
}finally {
workerGroup.shutdownGracefully();
bossGroup.shutdownGracefully();
}
}
public static void main(String[] args) throws Exception {
int port;
if(args.length>0){
port = Integer.parseInt(args[0]); }else {
port = 8080;
}
new DiscardServer(port).run();
} } }

运行结果:

可以看到服务端只接受进来的数据 而没有做任何答复。

github项目地址:https://github.com/INGUCoder/learning/tree/master/Netty%E5%AD%A6%E4%B9%A0

来源:华为云社区  作者:INGUCoder

Netty实现丢弃服务协议(Netty4.X学习一)的更多相关文章

  1. Netty4.0学习笔记系列之一:Server与Client的通讯

    http://blog.csdn.net/u013252773/article/details/21046697 本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯 ...

  2. Netty(七):EventLoop学习前导——Reactor模式

    了解Netty的人多少都会知道Netty的高性能的一个原因就是它是基于事件驱动的,而这一事件的原型就是Reactor模式. 所以在学习EventLoop前,很有必要先搞懂Reactor模式. 本文目录 ...

  3. Netty4.0学习笔记系列之二:Handler的执行顺序(转)

    http://blog.csdn.net/u013252773/article/details/21195593 Handler在netty中,无疑占据着非常重要的地位.Handler与Servlet ...

  4. Netty4.0学习笔记系列之三:构建简单的http服务(转)

    http://blog.csdn.net/u013252773/article/details/21254257 本文主要介绍如何通过Netty构建一个简单的http服务. 想要实现的目的是: 1.C ...

  5. Netty4.X 学习(一)

    Server: import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.net ...

  6. Netty4.0学习笔记系列之四:混合使用coder和handler

    Handler如何使用在前面的例子中已经有了示范,那么同样是扩展自ChannelHandler的Encoder和Decoder,与Handler混合后又是如何使用的?本文将通过一个实际的小例子来展示它 ...

  7. Netty4.0学习笔记系列之二:Handler的执行顺序

    Handler在netty中,无疑占据着非常重要的地位.Handler与Servlet中的filter很像,通过Handler可以完成通讯报文的解码编码.拦截指定的报文.统一对日志错误进行处理.统一对 ...

  8. Netty4.0学习教程

    http://blog.csdn.net/u013252773/article/details/21046697 一些属性和方法介绍 http://blog.csdn.net/zxhoo/articl ...

  9. (一)Netty源码学习笔记之概念解读

    尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6121065.html  博主最近在做网络相关的项目,因此有契机学习netty,先 ...

随机推荐

  1. [考试反思]1015csp-s模拟测试74:压迫

    其实同时也是第27,一大片并列的. 真的是越考越烂. T1是个弱化的贪心原题,15分钟拿下没什么可说的. T2打的记忆化搜索,hash_mod太小撞哈希了,50->30 T3,想不到正解,90分 ...

  2. java.io.StreamCorruptedException: invalid stream header: 00000000

    Caused by: java.io.StreamCorruptedException: invalid stream header: 00000000 at java.io.ObjectInputS ...

  3. 在linux用ueditor遇到的问题

    在使用ueditor时,遇到很多问题.最大问题是就是服务器返回出错 最让人头疼的是preview没有任何信息.之前也找过很多的资料,很多资料都没有提到修改controller.php文件中error_ ...

  4. Apache Jmeter进行服务器压力测试

    1.前言 最近项目遇到一个问题:其他公司对接我们系统,请求量太大的时候,返回单给对方就是丢失格式,大概十几万中总有那么十几单会出现格式错误! 所以我们老大就叫我用apache jmeter来进行并发测 ...

  5. .NET Core 3.0 单元测试与 Asp.Net Core 3.0 集成测试

    单元测试与集成测试 测试必要性说明 相信大家在看到单元测试与集成测试这个标题时,会有很多感慨,我们无数次的在实践中提到要做单元测试.集成测试,但是大多数项目都没有做或者仅建了项目文件.这里有客观原因, ...

  6. 篇六:项目使用Dubbo

    导语:Dubbo是阿里巴巴的一个分布式服务的开源框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000 ...

  7. UML简明使用

    1.继承 空心三角+实线 2.实现接口 空心三角+虚线 3.关联 箭头+实线 4.聚合 空心菱形+实线+箭头 5.组合 实心菱形+实线+箭头 6.依赖 虚线+箭头 7.关联.聚合.组合.依赖的区别 关 ...

  8. IBM-X3850-4U诊断面板信息

    IBM X3850 4U 指示灯 描述 OVERSPEC 没有足够的电量为系统供电.NONRED和LOG指示灯可能也点亮 PS 一个电源故障或者被电源未插 LINK 保留 CPU CPU出现故障.丢失 ...

  9. django post请求

    django中提交post请求时候,需要携带CSRF,否则会报403错误,此时需要在form中添加{% csrf_token %} 或者注释掉settings.py -> MIDDLEWARE ...

  10. HTTP,HTTPS,HTTP2笔记

    HTTP 网络协议分层 应用层 -> HTTP FTP 为应用软件提供了很多服务 构建于TCP协议之上 屏蔽网络传输的相关细节 传输层 -> TCP UDP 向用户提供可靠的端对端的服务( ...