單線程單進程實現(xiàn)非阻塞

單進程單線程的非阻塞

設(shè)置套接字為非阻塞的方式:? ? tcp_server_socket.setblocking(Flase)

也要把new_socket設(shè)置為非阻塞方式:new_socket.setblocking(Flase)

accept()是判斷是否有新客戶端到來,recv是判斷是否有新數(shù)據(jù)到來

單進程單線程不能同一時刻為別人服務(wù),一定是并發(fā)不是并行,因為要是并行的話在列表里面的客戶端時要同時為別人服務(wù)的

先進入while:True循環(huán),然后判斷是否有新客戶到來,要是沒有就不會走else其中的列表是空的所以就不會進入for循環(huán);當有新的客戶端連接時就會走else其中列表就不為空就會走for循環(huán),就會調(diào)用已有的連接rece()來進行數(shù)據(jù)的獲取,其中要是數(shù)據(jù)沒有來就會進行下一輪循環(huán),當有新的數(shù)據(jù)獲取會產(chǎn)生兩種狀況:(1)對方已發(fā)送過來數(shù)據(jù)(2)對方調(diào)用close()導致了recv()返回



非阻塞長連接的特點是不斷開瀏覽器可以接著用鏈接發(fā)送請求,目的就是降低資源的消耗

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容