目录

服务端

  1. netty接收到一个调用信息
  2. 将请求放入一个线程池处理(默认200个线程,队列长度0)关键步骤
    1. 放入线程池时会提供 2个参数。
      1. 请求数据 :用于计算请求结果
      2. channel : 用于发送结果到客户端
        1. 由于netty所有的io操作都放在NioEventLoop中。在线程池中调用channel.write()时会创建一个异步任务放入NioEventLoop的任务队列中
  3. 处理请求,经过各种filter
    1. ContextFilter 填充上线文信息
    2. TimeoutFilter 处理超时
    3. ExceptionFilter 处理异常
  4. 构造到一个response, 里面携带request 的 id,并返回

客户端

将方法名称,方法的参数通过netty发到服务端,并等待服务端返回结果

细节点

如上图最后边的部分

  1. 服务端selector收到客户端的请求信息
  2. processSelectedKeys将请求放入业务线程池处理
  3. 业务线程池处理完后调用channel.write()回写结果
  4. 当调用write是发现当前线程不在channle所属的NioEventLoop的线程中,所以创建一个异步write任务放入NioEventLoop的任务队列