libevent的回調模式

在上一篇博客libevent多線程不發數據的問題研究了libevent多線程下如何正確的進行數據收發

原以爲問題已經解決,沒想到數據量大後,依然會出現數據接收不完全的問題。一直以爲是bufferevent_write不對。檢測返回值發現成功。但是接收端確實是沒收到這麼多數據。獲得fd後,自行調用write,也出現同樣問題。使用wireshark抓包發現,數據包是成功發出的。

經過羣友點撥,應該是數據處理的問題。在Linux中,epoll的事件觸發有兩種,邊緣觸發,水平觸發。
邊緣觸發:有數據來,你都沒讀完都不再通知。
水平觸發:只要你沒有讀完,就一直有通知。

這個情況的描述感覺和我的狀況非常相似,然後找到一篇文章:Libevent觸發模式。原來,libevent的通知是邊緣觸發。所以,我需要一直讀,直到bufferevent_read返回0。所以,將代碼中的do while false 改爲 do while true就解決了。😉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章