tbnet源码笔记

消息体需要有分隔符,magic number可以充当分隔符,放在消息体的开头,防止粘包?
消息体的codec方法可以与消息体进行绑定,成为一个Object.

epoll_event结构体中存在void* ptr,可以进行绑定

channel与packet是否应该存在deadline?

socket的读写可以设置次数限制,提升效率?没处理的怎么办,设置event?

一个connection对应一个ChannelPool ?
ChannelPool里有多个channel
ChannelPool维护freelist,used_list等结构
从freelist中取channel,之后放入used_list
每一个channel有一个uniqueId,
id -> channel 使用map进行存储

收到包后进行header的构造,检查data部分的合法性,例如长度
根据header.id在map中寻找channel

每一种packet-obj都有绑定对应的codec方法,进行packet构造后(factory 自定义实现?)
可以根据header,data进行codec操作

channel中有handler(client端),connection中有serveradapter,用来进行packet的具体处理,
处理过程自定义

ioc的构造需要Socket或ServerSocket(对native socket的封装)

在setEvent方法中,iocomponent会绑定到epollevent.data.ptr,同时会对epfd的interests set进行修改

connection的postpacket方法会将packet加入到outputQueue中,outputQueue的写操作,会在eventloop中进行调用(epoll_wait之后如果可写),
写操作复制并清空outputQueue,之后将数据写入databuffer,最后从databuffer对socket进行批量的写操作(batch)

ioc链表存储在transport中。
ioc的checketimeout方法,并不是每个ioc都相同。可能会进行socket.shutdown操作,如果有绑定connection会检测channel和packet的deadline,查看是否过期,
ChannelPool中timeout的channel从used_list中进行查找,如果过期会集中发送timeoutPacket

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值