單進程單線程的非阻塞
設(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ā)送請求,目的就是降低資源的消耗