From f2794bd956e8fa259c73402d00502ef5d3cf1494 Mon Sep 17 00:00:00 2001 From: Park Juhyung Date: Thu, 9 Jun 2022 10:55:40 +0900 Subject: [PATCH] docs: add a doc about Channel --- docs/channel.md | 30 ++++++++++++++++++++++++++ images/docs-arch-channel-pipeline.png | Bin 0 -> 41168 bytes 2 files changed, 30 insertions(+) create mode 100644 docs/channel.md create mode 100644 images/docs-arch-channel-pipeline.png diff --git a/docs/channel.md b/docs/channel.md new file mode 100644 index 0000000..a816086 --- /dev/null +++ b/docs/channel.md @@ -0,0 +1,30 @@ +# Channel + +A Channel is a class that abstracts an object that exchanges data with the outside like a TCP socket. In addition to TCP, it can support functions such as UDP sockets and Unix domain sockets. +In order to handle events that occur in Channel, el uses ChannelPipeline, ChannelHandlerContext, and ChannelHandler. + +![channel-pipeline-diagram](../images/docs-arch-channel-pipeline.png) + +Each Channel has a ChannelPipeline. ChannelPipeline manages ChannelHandler functions, and calls the functions when events occur. ChannelPipeline uses ChannelHandlerContext to manage ChannelHandlers by creating an doubly linked list. + +## ChannelPipeline + +When a Channel receives an event(like receiving data from a network), it passes it to a ChannelPipeline. The ChannelPipeline calls the first handler. When each handler finishes handling the event, it calls the next handler. + +If we send a message to a TCP channel, the invocation order of the handlers is reversed. + +--- +TODO: Add an image that explains the order of invocation of handlers. +--- + +## ChannelHandler + +A ChannelHandler is an event listener that listens events from a Channel. A ChannelHandler can listen all types of event from a Channel at a time. You can use the ChannelHandler to parse a message, to log the message, or to write business logic. + +## ChannelHandlerContext + +A ChannelHandlerContext is a wrapping class who is used by a ChannelPipeline to manage ChannelHandlers. + +## LocalChannel + +A LocalChannel is a Channel that should be used only for test purpose. We can connect two LocalChannel in a process's memory. We cannot use the LocalChannel to communicate with other process or other machine. diff --git a/images/docs-arch-channel-pipeline.png b/images/docs-arch-channel-pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..36a4d17562e682e6644e48801aa2e95b0f952a5e GIT binary patch literal 41168 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�#>+QS@#pr{-w9HF_I;3=`ntizBltL{W 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 A+5i9m literal 0 HcmV?d00001