getty 又双叒叕更新啦,一个长得有点像netty的网络框架

栏目: 软件资讯 · 发布时间: 6年前

内容简介:getty 又双叒叕更新啦!!! 本次更新主要是添加了UDP的支持。。。 getty是基于java nio(俗称nio1)封装了UDP,借助getty本身的架构设计,getty udp的性能表现也非常不错 基于getty良好的设计模式,getty udp的使...

getty 又双叒叕更新啦!!!

本次更新主要是添加了UDP的支持。。。

getty是基于java nio(俗称nio1)封装了UDP,借助getty本身的架构设计,getty udp的性能表现也非常不错

基于getty良好的设计模式,getty udp的使用方式与tcp差别不大。

唯一的区别就是需要指定socketChannel为UDP。默认不指定是TCP

需要指定UDP的消息编解码器

//对于UDP而言,只有DatagramPacketEncoder、DatagramPacketDecoder两个处理器是有效的
//原因在于UDP本身不存在连接,因而其他处理器即使配置了也是没有效果的
defaultChannelPipeline.addLast(new DatagramPacketEncoder());
defaultChannelPipeline.addLast(new DatagramPacketDecoder());
        //服务器端
        AioServerStarter server = new AioServerStarter(8888);
        //唯一的区别就是需要指定socketChannel为UDP。默认不指定是TCP
        server.socketChannel(SocketChannel.UDP).channelInitializer(new ChannelInitializer() {
            @Override
            public void initChannel(AioChannel channel) throws Exception {
                //获取责任链对象
                DefaultChannelPipeline defaultChannelPipeline = channel.getDefaultChannelPipeline();

                //对于UDP而言,只有DatagramPacketEncoder、DatagramPacketDecoder两个处理器是有效的
                //原因在于UDP本身不存在连接,因而其他处理器即使配置了也是没有效果的
                defaultChannelPipeline.addLast(new DatagramPacketEncoder());
                defaultChannelPipeline.addLast(new DatagramPacketDecoder());

                //添加自定义的简单消息处理器
                defaultChannelPipeline.addLast(new SimpleHandler());
            }
}).start();

------------------------------------------------------------------

        //客户端
        AioClientConfig aioConfig = new AioClientConfig();
        //Host与port无需指定也没有关系,指定了也没有效果
        aioConfig.setHost("127.0.0.1");
        aioConfig.setPort(port);
        aioConfig.setClientChunkSize(512 * 1024 * 1024);
        aioConfig.setBufferWriterQueueSize(2 * 1024 * 1024);


        AioClientStarter client = new AioClientStarter(aioConfig);
        client.socketChannel(SocketChannel.UDP).channelInitializer(new ChannelInitializer() {
            @Override
            public void initChannel(AioChannel channel) throws Exception {
                //责任链
                DefaultChannelPipeline defaultChannelPipeline = channel.getDefaultChannelPipeline();

                defaultChannelPipeline.addLast(new DatagramPacketEncoder());
                defaultChannelPipeline.addLast(new DatagramPacketDecoder());
                //定义消息解码器
                defaultChannelPipeline.addLast(new SimpleHandler());
            }
        });

        try {
            client.start();
        } catch (Exception e) {
            e.printStackTrace();
        }

//发送个消息给服务器
Thread.sleep(2000);
AioChannel aioChannel = client.getAioChannel();
String s = "hello getty";
byte[] msgBody = s.getBytes("utf-8");
//UDP消息发送的是DatagramPacket 发送的目标服务器在DatagramPacket 中指定
DatagramPacket datagramPacket = new DatagramPacket(msgBody, msgBody.length, new InetSocketAddress("127.0.0.1", 8888));
aioChannel.writeAndFlush(datagramPacket);

SimpleHandler的类型指定为 > DatagramPacket

public class SimpleHandler extends SimpleChannelInboundHandler<DatagramPacket> {
    @Override
    public void channelAdded(AioChannel aioChannel) {

        System.out.println("连接成功");

    }

    @Override
    public void channelClosed(AioChannel aioChannel) {
        System.out.println("连接关闭了");
    }


    @Override
    public void channelRead0(AioChannel aioChannel, DatagramPacket datagramPacket) {

        System.out.println("读取消息了:" + new String(datagramPacket.getData()));
        System.out.println("客户端地址:" + datagramPacket.getAddress().getHostName() + ":" + datagramPacket.getPort());
    }

    @Override
    public void exceptionCaught(AioChannel aioChannel, Throwable cause, PipelineDirection pipelineDirection) {
        System.out.println("出错了");
    }
}

 

getty的特点

1、完全基于java nio2封装,整体代码代码结构很轻量,也非常简单易用。

2、借鉴了netty和其他框架的部分优秀设计思想,如责任链、内存池化、零拷贝等优秀的设计模式。拥有媲美netty的高效性能(有自卖自夸嫌疑 getty 又双叒叕更新啦,一个长得有点像netty的网络框架 )。

3、提供了常用的多个插件(String处理器,protobuf消息处理器,心跳超时处理器、ip过滤等)满足大部分开发场景。

4、getty可直接在安卓环境中使用(api 26+ 或 android 8.0+)

5、getty同时提供了TCP和UDP的支持,并且使用方式几乎一致,大大提高了易用性。

5、handler处理器支持使用过程中的热拔插设计,各处理器可以灵活组合,。

6、框架拥有非常好的拓展性,处理器拓展非常简单,大大降低了开发成本

7、高效的性能和靠谱的稳定性,在使用过程中得到了很好的验证

8、与netty结合使用。使用过程与netty非常类似,只要有netty是使用经验,使用getty几乎不需要额外学习。

谢谢。。。。

 


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Learn Python the Hard Way

Learn Python the Hard Way

Zed Shaw / Example Product Manufacturer / 2011

This is a very beginner book for people who want to learn to code. If you can already code then the book will probably drive you insane. It's intended for people who have no coding chops to build up t......一起来看看 《Learn Python the Hard Way》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具