單進程單線程實現

今天嘗試着僅使用單進程、單線程、不用協程就完成多任務的web服務器簡單編程。問題多多,收穫多多。首先放上核心代碼
多任務的實現
整體思路是沒有問題的但是其間出現了很多小問題,這裏就想記錄一下:
1.程序一開始執行的時候,連接成功,但是無論怎麼發數據,都接收不到
bug1
檢查發現是代碼中,由於一開始思路設計沒有注意細節,.recv()中,沒有設置參數。這是會產生異常的,導致收到數據和沒有收到一樣的結果—產生異常。
解決:通過打印異常e,得到如下結果,發現bug
resolve1
通過這次粗心呢,其實也學到很多,首先使用time.sleep(),可以放慢過程,更好的測試程序;其次,是學會調試,應用try……exce框架的便利;最後,當然是提醒了我要注意編程習慣的良好養成。
2.然後,就是遇到的第二個問題,在調試助手上模擬的客戶端斷開連接之後,我的程序執行結果仍在輸出 客戶端沒有數據到來,理論上,根據四次揮手,在程序中,斷開連接的時候,應該是走到else,而不是except,因爲recv_data應該是收到了,只不過是空字符串而已,那麼,爲什麼會產生異常,認爲是連接還在?反覆檢查代碼之後,考慮可能是由於調試助手的原因,點擊斷開,是不是真正的斷開了連接?事實證明我的猜想是正確的。是調試助手的小bug,需要把調試助手整個關閉,連接才真正斷開,僅斷開、關閉模擬客戶端的界面,並沒有真正關閉連接。最後,貼上讓人感動的正確結果
終於等到你,還好沒放棄……

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