分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > IT知识

Netty新连接接入

发布时间:2023-09-06 02:05责任编辑:胡小海关键词:暂无标签

问题

1.Netty是在哪里检测有新连接接入的?

 答:boss线程的第一个过程轮训处Accept事件,然后boss线程第二个过程通过jdk底层的channel的accept方法创建该连接。

2.新连接是怎样注册到NioEventLoop线程的?

答:新连接NioEventLoop的分配和selector注册可以回答。boss线程调用chooser的next方法,拿到一个NioEventLoop,然后将这条连接注册到NioEventLoop的selector上面。

Netty新连接接入处理逻辑

(1)检测新连接:新连接通过服务端Channel绑定的Selector轮询出Accept事件

(2)创建NioSocketChannel:基于jdkNio的channle创建出一个netty的NioSocketChannel,也就是客户端Channel

(3)分配线程及注册selector:netty给客户端Channel分配一个NioEventLoop,并且把这条Channel注册到该NioEventLoop对应的selector上,至此这条Channel后续的读写都由此NioEventLoop进行管理

(4)向selector注册读事件:注册的过程和服务端启动注册事件复用同一段逻辑。

(1)检测新连接

processSelectedKey(key,channel)[入口]:添加断点

  NioMessageUnsafe.read()

    doReadMessages()[while循环]

      javaChannel().accept()

  • 运行Server.java的main函数,启动服务端
  • 在terminal中输入 telnet 127.0.0.1 8888(如果出现telnet不是内部或外部命令...则在控制面板-程序-启用或关闭Windows功能,勾选Telnet客户端)
  • 一步一步断点调试

(2)创建NioSocketChannel

 new NioSocketChannel(parent,ch)[入口]

  AbstractNioByteChannel(p,ch,op-read)

    configureBlocking(false)&save op

    create id,unsafe,pipeline

  new NioSocketChannelConfig()

    setTcpNoDelay(true)禁止Nagle算法,小的数据包会发出去,降低延迟

(3)分配线程及注册selector

 服务端Channel的pipeline构成

Head—>ServerBootstrapAcceptor—>Tail

其中ServerBootstrapAcceptor做以下事情:

  • 添加childHandler
  • 设置options和attrs
  • 选择NioEventLoop并注册selector

(4)向selector注册读事件

Netty中Channel的分类

  • NioServerSocketChannel:服务端Channel
  • NioSocketChannel:客户端Channel
  • Unsafe

服务端Channel和客户端Channel的不同点:

(a)   客户端Channel(AbstractNioByteChannel)向AbstractNioChannel注册一个读事件

  服务端Channel(AbstractNioMessageChannel)向AbstractNioChannel注册一个accept事件

  服务端Channel和客户端Channel共同的部分都由AbstractNioChannel实现

(b)   这两种Channel底层对应的Unsafe不同

  客户端Channel对应NioByteUnsafe:读取IO数据

  服务端Channel对应NioMessageUnsafe:读一条连接

Netty新连接接入

原文地址:https://www.cnblogs.com/chanaichao/p/9351488.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved