Repository navigation
关于LT触发 read和write的理解问题 #692
Answered
by
LunarStore
SpencerChou
asked this question in
Q&A
|
epoll采取lt触发,一次有可能并没法读取全部的数据,但是我在拜读muduo代码的时候,并没有看到比如说http connection的messagecallback中,buf是可能经过多次读取 ,整合成完整数据,然后再使用http去parse整个buf,如果一次读取没有完整读取,此时去parse不是会出问题的嘛,可是我在代码中好像没看到具体是是怎么处理的,, 还有write,一次如果没写完,存入了 outputbuffer,但是我好像也没看到代码中是如何对于outputbuffer在epoll进行一个持续的写的 行为。 请教一下各位 具体的代码是在哪去看呢,我好像还没看懂这个流程 |
Answered by
LunarStore
Sep 3, 2023
Replies: 4 comments 1 reply
比如代码中这一段,readfd之后就直接调用messagecallback了,但是如果此次数据并未读完呢 |
0 replies
muduo库中http的onmessage,,假设一个超大的http内容,一次没读取完,parse出来的结果岂不是不太对 |
0 replies
|
write看懂了 |
1 reply
okk看到了那个 onmessage的细节里面了,gotall,上面parse具体咋做的,我之前没点进去细看,以为只parse一次。。 |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
write就是先直接向fd里面写,写不完,说明发送缓冲区满了,然后剩下的字节就靠epoll异步通知写完就行了,
对于解析,采用的是状态机的形式,每次读数据都是同一个parse对象,状态机就是应对流数据的,流数据就是不可能一次性解析完的数据,建议你好好了解一下什么是状态机。