请求处理过程

  1. TioBootServerHandler.handler: 请求最先到达此处理器,负责协议区分,区分 tcp,WbSocket,Http 协议
  2. HttpServerAioHandler.handler: 负责接收数据,解析成 Http 数据和初步处理请求。
  3. DefaultHttpRequestHandler.handler: 此处理器进一步处理 HTTP 请求,将请求分发到相应的处理方法。
  4. HandlerDispatcher.executeAction: 该分发器负责执行 Controller 的 Action。
  5. IndexController.index: 最终,请求到达控制器的 index 方法,这里是请求的具体业务逻辑处理的地方。

tio-boot请求处理流程

通过异常堆栈分析请求处理流程

  at com.litongjava.data.services.DbJsonService.page(DbJsonService.java:393)
  at com.litongjava.data.services.DbJsonService.page(DbJsonService.java:362)
  at com.litongjava.data.services.DbJsonService.page(DbJsonService.java:330)
  at com.litongjava.open.chat.controller.ApiTableController.pagePublic(ApiTableController.java:135)
  at com.litongjava.open.chat.controller.TableJsonControllerMethodAccess.invoke(Unknown Source)
  at com.esotericsoftware.reflectasm.MethodAccess.invoke(MethodAccess.java:39)
  at com.litongjava.tio.boot.http.handler.RequestActionDispatcher.executeActionWithParas(RequestActionDispatcher.java:148)
  at com.litongjava.tio.boot.http.handler.RequestActionDispatcher.executeAction(RequestActionDispatcher.java:83)
  at com.litongjava.tio.boot.http.handler.DynamicRequestHandler.processDynamic(DynamicRequestHandler.java:23)
  at com.litongjava.tio.boot.http.handler.DefaultHttpRequestHandler.handler(DefaultHttpRequestHandler.java:315)
  at com.litongjava.tio.http.server.HttpServerAioHandler.handler(HttpServerAioHandler.java:87)
  at com.litongjava.tio.boot.server.TioBootServerHandler.handler(TioBootServerHandler.java:142)
  at com.litongjava.tio.core.task.HandlerRunnable.handler(HandlerRunnable.java:67)
  at com.litongjava.tio.core.task.DecodeRunnable.handler(DecodeRunnable.java:55)
  at com.litongjava.tio.core.task.DecodeRunnable.decode(DecodeRunnable.java:205)
  at com.litongjava.tio.core.ReadCompletionHandler.completed(ReadCompletionHandler.java:83)
  at com.litongjava.tio.core.ReadCompletionHandler.completed(ReadCompletionHandler.java:21)
  at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
  at sun.nio.ch.Invoker.invokeDirect(Invoker.java:157)
  at sun.nio.ch.UnixAsynchronousSocketChannelImpl.implRead(UnixAsynchronousSocketChannelImpl.java:553)
  at sun.nio.ch.AsynchronousSocketChannelImpl.read(AsynchronousSocketChannelImpl.java:276)
  at sun.nio.ch.AsynchronousSocketChannelImpl.read(AsynchronousSocketChannelImpl.java:297)
  at java.nio.channels.AsynchronousSocketChannel.read(AsynchronousSocketChannel.java:420)
  at com.litongjava.tio.server.AcceptCompletionHandler.completed(AcceptCompletionHandler.java:117)
  at com.litongjava.tio.server.AcceptCompletionHandler.completed(AcceptCompletionHandler.java:25)
  at sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:126)
  at sun.nio.ch.Invoker$2.run(Invoker.java:218)
  at sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
  at java.lang.Thread.run(Thread.java:750)
  1. 请求从底层的 NIO 异步通道开始,通过 ThreadPoolExecutor 执行。

  2. 请求被 AcceptCompletionHandler 接收并处理。

  3. 数据通过 AsynchronousSocketChannel 读取。

  4. ReadCompletionHandler 完成读取操作。

  5. DecodeRunnable 对读取的数据进行解码。

  6. HandlerRunnable 调用 TioBootServerHandler 处理请求。

  7. HttpServerAioHandler 处理 HTTP 请求。

  8. DefaultHttpRequestHandler 作为默认的 HTTP 请求处理器被调用。

  9. DynamicRequestHandler 处理动态请求。

  10. RequestActionDispatcher 分发请求到对应的 action。

  11. 使用反射(MethodAccess)调用 ApiTableController 的 pagePublic 方法。

  12. ApiTableController 调用 DbJsonService 的 page 方法。

  13. DbJsonService 执行分页查询逻辑。