`
切切克闹
  • 浏览: 15660 次
社区版块
存档分类
最新评论

Netty开发记录(番外篇)

阅读更多

 

今天我们说说netty可以干什么吧,这是什么东西.

Netty是一套开发框架,和spring,hibernate等等一样都是框架,但是(重点来了哈)它和后两者的功能不一样。采用框架开发项目的好处不言而喻了。

Netty是基于java NIO开发出来的框架,也就是说,它是java编写的,主要用到了java NIO库,还有线程那些东西。所以Netty的jar引入的时候不需要下载额外的jar包了。java NIO就不多说了,不懂就暂且当成IO,但是记住,有区别。

Netty这套框架主要用于C/S的项目,但是现在C、B已经很混淆了,我就说Netty可以开发用哪些协议的项目吧,TCP/IP,HTTP,UDP等等,如果不懂,就先记着,但是记住自己还有哪些不懂的哦。:)

 

下面我举个例子说明下Netty的优越性,在以前我用java开发web项目的时候,前后台数据交互时,我是不需要懂自己传输的,我只知道一些方法,譬如request.getparameter()就拿到前台传过来的数据了,但是这中间经历了什么,我是不知道的,就算不知道 好像也不影响我开发项目。但是(哈哈,好像每个但是都是重点哦)这样我能知道我的服务器这个时间点上传输了多少K的数据吗?显然有些麻烦。(问题来了,网络传输,数据是以什么形式传送的?)另外,HTTP协议每次都要传输头信息,等等很多信息,这会很消耗带宽的哦。

 

后来啊,程序员前辈就想了很多方法来减少数据传输的量,譬如,现在熟知的,Ajax请求,每次只需要传输响应的数据就OK了,这种键值对的传送方式确实很大程度上削减了传输的数据量,而且开发起来也相当的友好。

 

但是HTTP协议有个非常痛苦的缺点,它是没有记忆的哦。也就是说,服务器是不记得你的哦,但是前辈的智慧是无穷的,session很好解决了这个问题,而分布式网络系统,首先要解决的就是这个session共享的问题,其实嘛,我们不用怕,别被这种高大上的词给唬住了,那都不是事,遇到问题一样能解决。

 

好了,这个例子一下就说大了,一句话总结,东西大了问题就多。

而Netty天生就不怕这些大批量的东西(其实到了很大的时候 它也搞不定),以TCP/IP开发为例说明下Netty相关的内容;

1,Netty可以让程序员直接接触到传输的字节流,也就是说,你清楚的知道我TM传了这么多东西啊!

2,Netty允许你用第三方或者是自己编写的字节编解码器,譬如Facebook的Thrift压缩二进制编码技术,Google的protobuf编码(很高大上?其实就是Object转成byte,这有什么啊,专门吓唬我们这种小白?哎,社会啊),这些编码技术确实很厉害,相比java自带的序列化性能强得不是一星半点,但是so what,我司自己进行编码,解码,直接操作字节流(但是很痛苦有木有){喂,喂,那谁,这前三个字节是指令。那谁,接着的7个字节是长度},哎。就怕前期设计不好,后期从新设计。而且不同的指令,字节流不同啊 。所以,这个时候就考验设计模式学得怎么样了。一展开话题就很多了,不说了。

3,拓展性,今天你用它开发tcp,明天可以开发UDP,后天来个WebSocket.那么问题来了,如果出现这种事,你猜我会骂谁大笑?

4,哎,说得自己都醉了。先学学,学好了直接用上去,项目跑起来再说,一遍一遍的重构,心得体会就都有了。

好了不说了,来例子吧。Netty用在什么地方,阿里的dubbo,hadoop。现在不说,今天就到这吧。

对了,我忘记说,大家可以去Netty的官网,找到一些官方给出的例子,这些很好,能跑起来;官方还给出了一些git的链接,但是这里面的项目,我试两个,都没法正常的运行。参照这些例子,再买本书,好好研究下,直接搞项目,没问题。

1
2
分享到:
评论
10 楼 在世界的中心呼喚愛 2014-10-29  
切切克闹 写道
在世界的中心呼喚愛 写道
在世界的中心呼喚愛 写道
切切克闹 写道
在世界的中心呼喚愛 写道
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。

你可以用反射,在channelRead中处理。

什么意思呢?
反射?
我接收到的字节,我需要改动,然后在发送...
这个怎么反射?没有什么关系吧

就是不想在handler里改动,然后发送...想放在另一个类里处理


我明白你的意思,你更希望有个监听,收到字节后,然后调用其他类的方法处理。我的意思是你在Handler里面通过new或者newInstance拿到示例,然后通过method.invoke的方式执行相关的方法。

我的思想还是java原生socket发送那种,调用个方法,然后直接处理;刚刚接触netty时间不久。。

netty不能像java自带的socket发送那样,封装个工具类,然后send和receive那样,调用个方法就行?

你说用ChannelFuture去监听事件?接收到数据,在去调用其他方法,但是我这个操作,最终要转换成其他数据,然后在返回给前端。。
我疑问还是在那main方法之后获取handler中的数据,我运行几个官方例子,他们接收handler里的数据是要在 run方法里调用。。

public void run() throws Exception {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap b = new Bootstrap();
            b.group(group)
             .channel(NioSocketChannel.class)
             .handler(new FactorialClientInitializer(count));

            // Make a new connection.
            ChannelFuture f = b.connect(host, port).sync();

            // Get the handler instance to retrieve the answer.
            FactorialClientHandler handler =
                (FactorialClientHandler) f.channel().pipeline().last();

            // Print out the answer.
            System.err.format("Factorial of %,d is: %,d", count, [color=red]handler.getFactorial()[/color]);
        } finally {
            group.shutdownGracefully();
        }
    }

我想在run方法之外没有办法调用了。。。
handler.getFactorial()这个方法就是handler里定义一个同步队列,然后返回的
我的协议是udp。
9 楼 切切克闹 2014-10-28  
在世界的中心呼喚愛 写道
在世界的中心呼喚愛 写道
切切克闹 写道
在世界的中心呼喚愛 写道
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。

你可以用反射,在channelRead中处理。

什么意思呢?
反射?
我接收到的字节,我需要改动,然后在发送...
这个怎么反射?没有什么关系吧

就是不想在handler里改动,然后发送...想放在另一个类里处理


我明白你的意思,你更希望有个监听,收到字节后,然后调用其他类的方法处理。我的意思是你在Handler里面通过new或者newInstance拿到示例,然后通过method.invoke的方式执行相关的方法。
8 楼 在世界的中心呼喚愛 2014-10-28  
在世界的中心呼喚愛 写道
切切克闹 写道
在世界的中心呼喚愛 写道
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。

你可以用反射,在channelRead中处理。

什么意思呢?
反射?
我接收到的字节,我需要改动,然后在发送...
这个怎么反射?没有什么关系吧

就是不想在handler里改动,然后发送...想放在另一个类里处理
7 楼 在世界的中心呼喚愛 2014-10-28  
切切克闹 写道
在世界的中心呼喚愛 写道
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。

你可以用反射,在channelRead中处理。

什么意思呢?
反射?
我接收到的字节,我需要改动,然后在发送...
这个怎么反射?没有什么关系吧
6 楼 切切克闹 2014-10-28  
linginfanta 写道
这是干货,秘鲁玛卡

必须的,24k纯干货
5 楼 切切克闹 2014-10-28  
在世界的中心呼喚愛 写道
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。

你可以用反射,在channelRead中处理。
4 楼 linginfanta 2014-10-28  
这是干货,秘鲁玛卡
3 楼 在世界的中心呼喚愛 2014-10-28  
切切克闹 写道
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。

我的问题:handler中channelRead接收到的消息,我不想在channelRead中处理,我想在另一个类中处理,我目前用同步队列存这个数据,然后在另一个类里取,问题取不出来。。
我协议是udp的。。
原来java.net的udp协议处理报文,可以这样send之后,接收,处理数据,再把处理的数据send。。
netty我是不懂怎么实现。。
2 楼 切切克闹 2014-10-28  
lassove 写道
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

你的难点在哪,哪块搞不清楚了。
1 楼 lassove 2014-10-28  
最近也在搞netty开发 貌似没大神说的那么简单啊 坐等更多分享

相关推荐

    Netty开发记录三

    在本篇“Netty开发记录三”中,我们将深入探讨Netty框架的使用,这是一个高效、灵活且可扩展的网络应用程序框架,广泛应用于高性能服务器和客户端的开发。Netty简化了网络编程,提供了异步事件驱动的网络通信模型,...

    NIO netty开发

    netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty开发之nio netty...

    基于 Netty 开发的 Java 游戏服务端框架,目前提供 CocosCreator 和 Unity 的客户端SDK.zip

    基于 Netty 开发的 Java 游戏服务端框架,目前提供 CocosCreator 和 Unity 的客户端SDK.zip 基于 Netty 开发的 Java 游戏服务端框架,目前提供 CocosCreator 和 Unity 的客户端SDK.zip 基于 Netty 开发的 Java 游戏...

    springboot+netty开发简易式游戏源码

    在本项目中,"springboot+netty开发简易式游戏源码"是一个使用Spring Boot和Netty框架构建的轻量级游戏服务器的示例。这个项目结合了两个强大的技术,旨在提供一个高效、可扩展的游戏后端解决方案。下面将详细阐述...

    netty开发工具包

    通过使用Netty 开发工具包,开发者可以快速搭建网络服务,专注于业务逻辑,而无需关心底层的网络通信细节。Netty-3.2.7.Final.jar 是Netty 3.2系列的一个版本,包含了该版本所有功能的实现。虽然这个版本相对较旧,...

    netty开发实战

    Netty是一款由JBOSS提供的开源Java框架,主要功能是利用异步事件驱动的网络应用程序框架和工具,来帮助开发者快速开发高性能、高可靠性的网络服务器和客户端程序。Netty的最新版本为4.0.27.Final,虽然文档中提到的...

    Netty开发资源.rar

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个“Netty开发资源.rar”压缩包包含了Netty的不同版本及其相关的开发资源和文档,对于学习和使用Netty进行...

    使用netty进行rtsp服务端开发.zip

    Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用Netty进行RTSP(Real Time Streaming Protocol)服务端的开发,以及如何处理H264...

    netty中文开发指南

    ### Netty中文开发指南知识点概览 #### 一、Netty概述 - **定义与特点**:Netty是一个异步的、事件驱动的网络编程框架,用于Java平台,旨在简化高性能、可扩展的网络应用程序的开发。Netty利用Java NIO(非阻塞I/O...

    Netty开发视频教程

    ### Netty开发视频教程知识点详解 #### 一、Netty简介与环境搭建 - **Netty概述**:Netty是一款高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器与客户端。它由JBOSS提出,后被Red ...

    netty开发包

    netty开发包,墙内不太容易下载吧?是做异步通信的,继承了java.nio的功能,更加方便做开发

    Netty-4.0.23 开发文档(英文原版开发手册)

    Netty-4.0.23 开发文档(英文原版开发手册)

    rtmpServer-master_nettyrtmp_rtmp推流_netty开发rtmp_rtmpServer-master

    本项目“rtmpServer-master_nettyrtmp_rtmp推流_netty开发rtmp_rtmpServer-master”是针对RTMP协议开发的一个服务器端实现,它基于强大的Java网络库Netty。以下将详细介绍该服务器的开发背景、功能、核心技术和应用...

    基于Netty框架开发的Modbus源代码。

    基于Netty框架开发的Modbus源代码。支持 * READ COILS | 0x01 * READ DISCRETE INPUTS | 0x02 * READ HOLDING REGISTERS | 0x03 * READ INPUT REGISTERS | 0x04 * WRITE SINGLE COIL | 0x05 * WRITE SINGLE REGISTER...

    Netty入门教程文档

    Netty入门教程文档 Netty是Java的网络编程框架,广泛应用于数据采集服务中,本文将对Netty的基本概念和应用进行详细介绍,并将其与ETL技术结合,讲解如何使用Netty进行数据流转和处理。 1. ETL概述 ETL(Extract...

    基于netty开发的android端即时通讯

    Netty是一个高性能、异步事件驱动的网络应用框架,用于快速开发可维护的高性能协议服务器和客户端。它提供了丰富的API,简化了网络编程的复杂性,特别适合构建低延迟、高吞吐量的网络应用程序。在Android平台上使用...

    netty实现的聊天代码

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个“netty实现的聊天代码”中,我们可以深入理解如何使用 Netty 框架来构建简单的聊天应用。这个 demo ...

    Java Netty 分布式开发 框架

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

    基于netty的websocket开发小结

    这篇基于Netty的WebSocket开发小结将探讨如何使用Netty实现WebSocket服务端和客户端的交互。 首先,我们要理解WebSocket的基本概念。WebSocket协议定义了一种在单个TCP连接上进行全双工通信的协议。它通过在握手...

Global site tag (gtag.js) - Google Analytics