@startuml
activate EventLoop
EventLoop -> Channel: IOEventCallback()
activate Channel
Channel -> Channel:OnRead()
activate Channel
Channel -> ardb:fire_message_received<Buffer>()
activate ardb
ardb -> ChannelPipeline:SendUpstream<Buffer>(T& event)
activate ChannelPipeline
ChannelPipeline -> RedisCommandDecoder:HandleStreamEvent<Buffer>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
activate RedisCommandDecoder
RedisCommandDecoder -> RedisCommandDecoder:MessageReceived(ChannelHandlerContext& ctx, MessageEvent<Buffer>& e)
activate RedisCommandDecoder
RedisCommandDecoder -> RedisCommandDecoder:Decode(ChannelHandlerContext& ctx, Channel* channel, Buffer& buffer, RedisCommandFrame& msg)
activate RedisCommandDecoder
RedisCommandDecoder -> ardb:fire_message_received<RedisCommandFrame>(ChannelHandlerContext& ctx, T* message, typename Type<T>::Destructor* destructor)
activate ardb
ardb -> ChannelPipeline:SendUpstream<RedisCommandFrame>(T& event)
activate ChannelPipeline
ChannelPipeline -> RedisRequestHandler:HandleStreamEvent<RedisCommandFrame>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
activate RedisRequestHandler
RedisRequestHandler -> RedisRequestHandler:MessageReceived(ChannelHandlerContext& ctx, MessageEvent<RedisCommandFrame>& e)
activate RedisRequestHandler
RedisRequestHandler -> Ardb:Call(Context& ctx, RedisCommandFrame& args)
activate Ardb
Ardb -> Ardb:DoCall(Context& ctx, RedisCommandHandlerSetting& setting, RedisCommandFrame& args)
activate Ardb
Ardb -> Ardb:RedisCommandHandler()
activate Ardb
deactivate Ardb
deactivate Ardb
RedisRequestHandler <-- Ardb:Call(Context& ctx, RedisCommandFrame& args)
deactivate Ardb
deactivate RedisRequestHandler
RedisRequestHandler -> Channel:Write<RedisReply>(T& msg)
activate Channel
Channel -> ardb:write_channel<RedisReply>(Channel* channel, T* message, typename Type<T>::Destructor* destructor)
activate ardb
ardb -> ChannelPipeline:SendDownstream<RedisReply>(T& event)
activate ChannelPipeline
ChannelPipeline -> ChannelPipeline:SendDownstream<RedisReply>(ChannelHandlerContext* ctx, T& e)
activate ChannelPipeline
ChannelPipeline -> RedisReplyEncoder:HandleStreamEvent<RedisReply>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
activate RedisReplyEncoder
RedisReplyEncoder -> RedisReplyEncoder:WriteRequested(ChannelHandlerContext& ctx, MessageEvent<RedisReply>& e)
activate RedisReplyEncoder
RedisReplyEncoder -> RedisReplyEncoder:RedisReplyEncoder::Encode(Buffer& buf, RedisReply& reply)
activate RedisReplyEncoder
deactivate RedisReplyEncoder
RedisReplyEncoder -> Channel:EnableWriting()
activate Channel
RedisReplyEncoder <-- Channel:EnableWriting()
deactivate Channel
deactivate RedisReplyEncoder
ChannelPipeline <-- RedisReplyEncoder:HandleStreamEvent<RedisReply>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
deactivate RedisReplyEncoder
deactivate ChannelPipeline
ardb <-- ChannelPipeline:SendDownstream<RedisReply>(T& event)
deactivate ChannelPipeline
Channel <-- ardb:write_channel<RedisReply>(Channel* channel, T* message, typename Type<T>::Destructor* destructor)
deactivate ardb
RedisRequestHandler <-- Channel:Write<RedisReply>(T& msg)
deactivate Channel
ChannelPipeline <-- RedisRequestHandler:HandleStreamEvent<RedisCommandFrame>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
deactivate RedisRequestHandler
ardb <-- ChannelPipeline:SendUpstream<RedisCommandFrame>(T& event)
deactivate ChannelPipeline
RedisCommandDecoder <-- ardb:fire_message_received<RedisCommandFrame>(ChannelHandlerContext& ctx, T* message, typename Type<T>::Destructor* destructor)
deactivate ardb
deactivate RedisCommandDecoder
deactivate RedisCommandDecoder
ChannelPipeline <-- RedisCommandDecoder:HandleStreamEvent<Buffer>(ChannelHandlerContext& ctx, MessageEvent<T>& e)
deactivate RedisCommandDecoder
ardb <-- ChannelPipeline:SendUpstream<Buffer>(T& event)
deactivate ChannelPipeline
Channel <-- ardb:fire_message_received<Buffer>()
deactivate ardb
deactivate Channel
'-----------------------
Channel -> Channel:OnWrite()
activate Channel
Channel -> Channel:DoFlush()
activate Channel
deactivate Channel
deactivate Channel
EventLoop <-- Channel: IOEventCallback()
deactivate Channel
deactivate EventLoop
@enduml
ardb IO event 处理流程
最新推荐文章于 2024-07-11 11:52:18 发布