ardb IO event 处理流程

io event handle

@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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值