前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >03-EventLoop通过Provider模式实现Selector

03-EventLoop通过Provider模式实现Selector

原创
作者头像
spbreak
修改2023-10-22 08:05:29
1200
修改2023-10-22 08:05:29
举报
文章被收录于专栏:nettynetty

Selector 事件选择器(多路复用器)

  • 用于检查一个或多个NIO Channel(通道)的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接

Provider模式

  • 通常Provider由3个角色组成: 接口(协议)-提供者-实现者
  • 分离实现者与应用者, 相互间使用统一协议(接口)进行交互
provider模式实现selector
provider模式实现selector
代码语言:javascript
复制
// EventLoopGroup传递SelectorProvider提供者给EventLoop
public class NioEventLoopGroup implements EventExecutorGroup {
    ...
    public NioEventLoopGroup(int nThreads) {
        // SelectorProvider提供者
        this(nThreads, SelectorProvider.provider());
    }

    public NioEventLoopGroup(int nThreads, final SelectorProvider selectorProvider) {
        this(nThreads == 0 ? DEFAULT_EVENT_LOOP_THREADS : nThreads, selectorProvider, DefaultEventExecutorChooserFactory.INSTANCE);
    }
}
代码语言:javascript
复制
// selector的实现: provider.openSelector() 通过提供者返回适配的selector实现
public class NioEventLoop extends SingleThreadEventLoop {

    private Selector selector;
    private final SelectorProvider provider;
    
    public NioEventLoop(SelectorProvider selectorProvider) {
        this.provider = selectorProvider;
        this.selector = openSelector();
    }

    private Selector openSelector() {
        try {
            return provider.openSelector();
        } catch (IOException e) {
            throw new ChannelException("failed to open a new selector", e);
        }
    }
}

https://github.com/spbreak/i-netty/tree/master/03-selector

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Selector 事件选择器(多路复用器)
  • Provider模式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档