`
flychao88
  • 浏览: 753065 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用JAVA操作netty框架

 
阅读更多
之前使用过MINA框架,感觉效率非常好,使用长连接可以支持10万次以上的并发。
今天尝试使用了Netty框架,感觉使用上也非常方便,具体效率问题,在接下来的博客会详细解读:

NioServerSocketChannelFactory创建服务端的ServerSocketChannel,采用多线程执行非阻塞IO,和Mina的设计

模式一样,都采用了Reactor模式。其中bossExecutor、workerExecutor是两个线程池,bossExecutor用来接收客户端连接,workerExecutor用来执行非阻塞的IO操作,主要是read,write。





package netty;

import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
import org.jboss.netty.handler.codec.string.StringDecoder;
import org.jboss.netty.handler.codec.string.StringEncoder;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

/**
 * Created by IntelliJ IDEA.
 * User: flychao88
 * Date: 12-6-6
 * Time: 上午10:14
 * To change this template use File | Settings | File Templates.
 */
public class DiscardServer {
    public static void main(String[] args) throws Exception {
        ChannelFactory factory = new NioServerSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool());
        ServerBootstrap bootstrap = new ServerBootstrap (factory);
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() {
                 ChannelPipeline pipeline = Channels.pipeline();
                pipeline.addLast("encode",new StringEncoder());
                pipeline.addLast("decode",new StringDecoder());
                pipeline.addLast("handler",new DiscardServerHandler());
                return pipeline;
            }
        });
        bootstrap.setOption("child.tcpNoDelay", true);
        bootstrap.setOption("child.keepAlive", true);
        bootstrap.bind(new InetSocketAddress(8080));
    }
}


package netty;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.*;

/**
 * Created by IntelliJ IDEA.
 * User: flychao88
 * Date: 12-6-6
 * Time: 上午10:10
 * To change this template use File | Settings | File Templates.
 */
public class DiscardServerHandler extends SimpleChannelUpstreamHandler  {
    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
       System.out.println("服务器接收1:"+e.getMessage());
    }
    
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
        e.getCause().printStackTrace();
        Channel ch = e.getChannel();
        ch.close();
    }
}




package netty;

import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
import org.jboss.netty.handler.codec.string.StringDecoder;
import org.jboss.netty.handler.codec.string.StringEncoder;

import java.net.InetSocketAddress;
import java.util.concurrent.Executors;

/**
 * Created by IntelliJ IDEA.
 * User: flychao88
 * Date: 12-6-6
 * Time: 上午10:21
 * To change this template use File | Settings | File Templates.
 */
public class TimeClient {
    public static void main(String[] args) throws Exception {
        
        ChannelFactory factory = new NioClientSocketChannelFactory(
            Executors.newCachedThreadPool(),
            Executors.newCachedThreadPool());
        ClientBootstrap bootstrap = new ClientBootstrap(factory);
        bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
            public ChannelPipeline getPipeline() {
                ChannelPipeline pipeline = Channels.pipeline();
                pipeline.addLast("encode",new StringEncoder());
                pipeline.addLast("decode",new StringDecoder());
                pipeline.addLast("handler",new TimeClientHandler());
                return pipeline;
            }
        });
        bootstrap.setOption("tcpNoDelay" , true);
        bootstrap.setOption("keepAlive", true);
        bootstrap.connect (new InetSocketAddress("127.0.0.1", 8080));
    }
}




package netty;

/**
 * Created by IntelliJ IDEA.
 * User: flychao88
 * Date: 12-6-6
 * Time: 上午10:22
 * To change this template use File | Settings | File Templates.
 */
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.*;

import java.util.Date;


public class TimeClientHandler extends SimpleChannelUpstreamHandler  {
    @Override
    public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) {
        e.getChannel().write("abcd");
    }

    @Override
    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
        e.getChannel().close();
    }
    
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
        e.getCause().printStackTrace();
        e.getChannel().close();
    }
}




分享到:
评论
15 楼 萨琳娜啊 2018-07-10  
Java读源码之Netty深入剖析
网盘地址:https://pan.baidu.com/s/11kYm2fhJg5CkxIkv0Etvbw 密码: kipg
备用地址(腾讯微云):https://share.weiyun.com/5Bs3HcR 密码:uu95be

JavaCoder如果没有研究过Netty,那么你对Java语言的使用和理解仅仅停留在表面水平,如果你要进阶,想了解Java服务器的深层高阶知识,Netty绝对是一个必须要过的门槛。

本课程带你从一个Socket例子入手,一步步深入探究Netty各个模块的源码,深入剖析Netty的工作流程和源码设计,让你不但“真懂”也要“会用”
14 楼 小灯笼 2018-06-06  
Netty源码剖析视频教程
网盘地址:https://pan.baidu.com/s/1bvqEWNLisEcJ6OCHYhlcsw 密码: f4e4
备用地址(腾讯微云):http://url.cn/5R2xYI4 密码:OmbopD
13 楼 heng123 2017-10-03  
Netty视频教程https://www.douban.com/note/619228582/
12 楼 kongdong88 2017-08-16  
Netty简单应用与线上服务器部署
课程学习地址:http://www.xuetuwuyou.com/course/198
课程出自学途无忧网:http://www.xuetuwuyou.com

一、开发环境
4.1.11.Final 
jdk1.8
maven 3.2
Spring 4.3.9


二、适合人群
①想深入学习java ClassLoader
②想在线上linux服务器上运行netty或Springboot服务

三、课程目标
①掌控ClassLoader
②学会编写shell脚本
③了解jvm内存分配
④熟悉线上服务器部署


四、课程目录
1、系统架构技术介绍
2、netty服务器编写
3、netty的编码和解码
4、Netty客户端编写
5、与spring整合
6、netty服务器待解决的问题
7、Classloader类加载器
8、自定义类加载器
9、第二种类加载器
10、热部署
11、类加载器加载外部配置文件
12、项目运行时加载依赖jar
13、项目运行时加载依赖jar第二种方案
14、linux服务器编写通用shell脚本启动JVM
15、优化Shell脚本
16、Shell脚本中加上JVM堆栈内存参数以及垃圾回收机制
17、Netty服务器加上配置信息




Netty课程整合推荐:

Netty简单应用与线上服务器部署
课程观看地址:http://www.xuetuwuyou.com/course/198

深入浅出Netty源码剖析
课程观看地址:http://www.xuetuwuyou.com/course/157

Netty实战高性能分布式RPC
课程观看地址:http://www.xuetuwuyou.com/course/171

NIO+Netty5各种RPC架构实战演练
课程观看地址:http://www.xuetuwuyou.com/course/52

物联网核心技术之Netty入门到精通课程
课程观看地址:http://www.xuetuwuyou.com/course/14

Netty三部曲,夜行侠老师带你玩转netty
课程观看地址:http://www.xuetuwuyou.com/course/175

Netty物联网高并发系统第一季
课程观看地址:http://www.xuetuwuyou.com/course/178
11 楼 smart152829 2017-07-01  

很不错的文章,最近看了看了夜行侠老师讲的Netty深入浅出源码剖析,里面用到了长连接高并发,在测试的时候,性能真的比之前的tomcat那些容器好几十倍
10 楼 xingxing 2016-11-18  
有jar包吗?
9 楼 darren_nizna 2016-09-07  
http://gitlore.com/darren/netty_in_action/index.html  Netty 实战(精髓)
8 楼 ustcdqk 2016-01-21  
[flash=200,200][/flash]
7 楼 Balena 2015-11-28  
NIO+Netty5各种RPC架构实战演练,我讲了一堂比较深入的视频,叫NIO+Netty5各种RPC架构实战演练,想要的小伙伴,可以加群511029656,也可以直接进入www.xuetuwuyou.com/course/52直接观看
6 楼 紫皇林 2015-07-10  
5 楼 逃荒形象 2015-02-08  
为什么服务端和客户端都启动后,服务端那边的消息是server ,客户端的client,服务端和客户端收到的是自己的。
4 楼 Jong88 2013-04-06  
flychao88 写道
ljl_ss 写道
貌似NioClientSocketChannelFactory和NioServerSocketChannelFactory位置放反了

哪里反了?这个我还测试过??望指教

类图关系反了
3 楼 flychao88 2012-08-09  
ljl_ss 写道
貌似NioClientSocketChannelFactory和NioServerSocketChannelFactory位置放反了

哪里反了?这个我还测试过??望指教
2 楼 flychao88 2012-08-09  
哪里反了?这个我还测试过?指教啊
1 楼 ljl_ss 2012-07-20  
貌似NioClientSocketChannelFactory和NioServerSocketChannelFactory位置放反了

相关推荐

    基于java的netty实现的可靠udp网络库(kcp算法),包含fec实现,可用于游戏,视频,加速等业务

    Java KCP是一个基于Java语言,利用Netty框架实现的可靠UDP网络库,它引入了KCP协议和Forward Error Correction (FEC)技术,为需要高效、低延迟传输的应用提供了强大的解决方案。KCP协议最初由Mars(巫师)设计,其...

    基于Netty框架的Java内网穿透与反向代理工具设计源码

    该项目是一款基于Netty框架开发的Java内网穿透与反向代理工具设计源码,总计包含117个文件,涵盖70个Java源文件、9个PNG图片文件、8个XML配置文件、4个Markdown文件、4个CRT证书文件、3个HTML文件以及少量其他类型...

    c++客户端和java(Netty)服务器端tcp通讯

    本话题将探讨如何使用C++客户端与Java(通过Netty框架)服务器端实现TCP通讯,并涉及数据序列化工具Protocol Buffers(protobuf)在两者之间的交互。 首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节...

    Java Netty 分布式开发 框架

    Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端,是基于Java NIO的异步非阻塞的网络编程框架。Netty在内部实现了自己的线程模型,支持多种协议,包括UDP、TCP、...

    java应用netty服务端和客户端

    综上所述,"java应用netty服务端和客户端"的示例涵盖了Netty框架的基本使用,包括服务器和客户端的启动、连接、数据传输以及模型对象的一致性。理解并掌握这些知识点对于构建基于Java的高性能网络应用至关重要。在...

    java Netty 框架例子源码.rar

    这个压缩包文件"java Netty 框架例子源码.rar"很可能包含了一系列示例代码,帮助我们了解和学习如何在实际项目中使用 Netty。 Netty 的核心组件包括: 1. **Channel**:是 Netty 中的基本概念,代表一个打开的连接...

    Java版基于Netty框架的远程控制程序及源代码

    基于Netty框架的远程桌面控制程序,压缩文件包含可执行jar包、源代码jar包和依赖的netty4jar包,jdk版本为1.7,双击MyRemoteControllerV2-1.0.jar可直接运行,最好在两台机子上测试,当然单机也可以测试,只不过有些...

    Java采用Netty实现基于DTU的TCP服务器 + 多端口 + 多协议

    本文将深入探讨如何使用Java的Netty框架实现一个基于DTU(Data Transfer Unit)的TCP服务器,该服务器具备多端口通信和多协议解析的能力。 首先,DTU是一种专门用于远程数据传输的设备,它能够通过GPRS、3G/4G等...

    Android基于Netty框架实现通信

    在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于多种协议的服务器和客户端应用。本篇文章将详细探讨如何在Android环境中利用...

    JAVA netty 获取串口数据并且下发数据

    Java Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在标题中提到的“JAVA Netty 获取串口数据并且下发数据”,这意味着我们将探讨如何利用Netty来处理串行...

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持10万并发,已用于生产环境

    Java + Netty 实现的高并发高可用MQTT服务broker,轻松支持...技术体系:(使用 netty 实现通信及协议解析,使用 nutzboot 提供依赖注入及属性配置,使用 redis 实现消息缓存,集群,使用 kafka 实现消息代理(可选))。

    使用Java基于Netty+Socks5+TLS实现的代理服务.zip

    在这个项目中,开发者使用Java和Netty框架实现了Socks5代理服务器,并结合了TLS加密,从而创建了一个安全的代理服务。具体实现可能包括以下步骤: 1. **设计协议解析器**:Netty的ChannelHandlerContext和...

    MOBA游戏的服务端,基于Java的Netty框架编写.zip

    本项目“MOBA游戏的服务端,基于Java的Netty框架编写”正是这样一个专注于服务端程序设计的实践案例。Netty是一个高性能、异步事件驱动的网络应用框架,它为开发可维护的高性能协议服务器和客户端提供了丰富的API。 ...

    基于java netty的udp客户端声呐数据对接

    总的来说,这个项目涵盖了网络协议(UDP和TCP)、数据解析(JSON)、协议对接、以及Java和Netty框架的使用。通过深入理解这些知识点,并结合具体的RuoYi-fast项目文件,我们可以构建出一个高效稳定的声呐数据对接...

    Java_NIO框架Netty教程

    资源名称:Java_NIO框架Netty教程资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    Java-NIO-Netty框架学习

    3. **高性能的缓冲区**:Netty使用ByteBuf作为缓冲区,相较于Java原生的ByteBuffer,提供了更丰富的操作接口和更优秀的性能。 4. **强大的编码解码器**:Netty提供了一系列预定义的编解码器,用于处理各种常见协议...

    JAVA基于Netty实现的聊天室

    【Java基于Netty实现的聊天室】是一种使用Java编程语言并借助Netty框架构建的实时通信应用。Netty是一个高性能、异步事件驱动的网络应用框架,为开发高并发、低延迟的网络应用提供了强大的支持。这个简易聊天室项目...

    netty框架 jar包

    总的来说,Netty框架为Java开发者提供了一个强大且灵活的工具,使得他们能够构建复杂的网络应用,而无需从零开始实现底层通信机制。这个"Netty框架 jar包"是实现这些功能的关键,它封装了所有必要的类和接口,使得...

    Android使用Netty网络框架实践(客户端、服务端)

    在Android开发中,有时我们需要构建高性能的网络通信应用,这时Netty框架就能派上大用场。Netty是一个异步事件驱动的网络应用程序框架,它为高性能、高可用性的网络服务器和客户端提供了一种简单易用的方式。本实践...

Global site tag (gtag.js) - Google Analytics