netty初步使用与了解

概述

就我个人的感受来说netty是一个nio的封装框架,他能够很简洁的进行tcp udp协议的开发使用。所以对于netty的使用大部分是基于rpc框架的开发 比如duboo.。

rpc 与webService

rpc简称远程方法调用 通过tcp udp websocket协议 进行数据的二进制传输和调用 与webService其实也可以称为rpc 但是最主要的不同是WebService是基于http协议的而且他的传输格式是json形式 在输出的效率上会差的比较多

 

netty的三大线程模型(reactor线程模型)

1.单线程模型:直接从名词上可以理解 就是创建一个线程处理所有连接读写的请求

2.多线程模型:在该模型中创建了两个事件对象 分别位boss事件对象和worker 事件对象其中worker事件对象位线池模式

3. 主从线程模型

在多线程模型中有单线程的boss事件对象而在主从线程模型中考虑到分发线程的压力所以在boss事件对象中也是由线程池进行负载均衡的

 

初步使用

package com.xiao.netty.first;

import com.sun.corba.se.internal.CosNaming.BootstrapServer;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class TestServer {
    public static void main(String args[]) throws InterruptedException {
        //由下的group可以推断出该线程模型有主从线程模型
        EventLoopGroup boss =new NioEventLoopGroup();
        EventLoopGroup worker=new NioEventLoopGroup();
        try {
            //创建服务serverBootstrap
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            //childHandler绑定的是worker线程池,Handler绑定的是boss线程池
            serverBootstrap.group(boss, worker).channel(NioServerSocketChannel.class).childHandler(new TestServerInitializer());
            //绑定8899端口并监听
            ChannelFuture channelFuture = serverBootstrap.bind(8899).sync();
            //监听事件停止操作
            channelFuture.channel().closeFuture().sync();
        }finally {
            //优雅关闭
            boss.shutdownGracefully();
            worker.shutdownGracefully();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值