Python封裝IOCP

來源:互聯網
上載者:User

    2011-07-22:源碼下載:http://blog.csdn.net/jgood/article/details/6626872

    Python是一門簡潔而優雅的語言,她的高生產率使我們能用最少的人力、物力、時間、財力代價解決眼前的問題。但是當解決了眼前的問題,一些更長遠的問題就不得不考慮。

    利用Python內建的socket模組寫網路伺服器程式,很難能夠承受上千個串連。我曾經參考賴勇浩同學的NetStream模組,使用Python內建的socket模組來編寫通訊模型,但實際的效果並不是很好,當串連數量達到800個左右的時候,cpu資源佔用率就達70%-80%。當然可能是我寫的代碼品質比較差。Darkspy是高手,它自己封裝的通訊模型能夠達到非常高的效率,可是我遠沒有達到他那樣的水平。賴勇浩同學給我的意見是:在windows平台下要建立高效能的網路通訊平台,最好使用IOCP。於是乎,這幾天一直在嘗試用Python來封裝Iocp。

    Python本身是用C語言實現的,對c/c++的嵌入式擴充支援非常好,c/c++的代碼只要簡單的封裝就可以被python調用,反之亦然。所以,使用c/c++來封裝Iocp,然後用Python來調用,應該是個不錯的解決方案。

    網上關於IOCP的資料非常多, 現成的代碼也隨處可見。別看它只要用兩三個windows api函數就可以實現,但真正要理解IOCP、理解windows的重疊IO模型,還是要花費一般周折的。我花了大量的時間學習windows的重疊IO模型,參考網上的一些例子,用c++代碼寫出最簡單的例子,然後用Python對其進行封裝。對於windows重疊IO模型、IOCP的理解,我還是比較模糊,在接下來的一段時間裡要好好消化。

    使用IOCP完成底層用戶端socket的串連/斷開、資料收發。將IOCP接收到的資料交給Python處理,Python處理完成後,再通過IOCP將資料發回用戶端。大概的流程如下:

    在我封裝的IOCP模組中, 只提供了五個方法:

PyIocp.start(port, max_conn_count, buffer_size)

    該方法用於啟動監聽。參數port是監聽的連接埠號碼;max_conn_count表示最大允許的串連數;buffer_size用於指定低層收發資料的緩衝區大小。如果函數啟動成功,返回0。

PyIocp.stop()

    stop方法用於關閉監聽。

PyIocp.recv()

    recv()方法返回接收到的資料。這裡的資料,不單指socket發送/接收的資料,對於串連建立、串連斷開,也是以資料的形式提供給Python的。可以根據返回的元組的第一個元素來判斷資料的類型。例如:如果使用者串連上伺服器,那麼通過調用recv()返回一個三元元組:(1, socket_id, “ip:port”);當使用者中斷連線時,返回(2, socket_id, “”);當接收到資料時,返回(4, socket_id, ‘這裡是資料’); 如果當前沒有資料,調用recv()方法將返回(0, 0XFFFFFFFF, “”)。

PyIocp.send(socket_id, data)

    send()方法用於發送資料。如果調用成功,返回傳送資料的長度。如果操作失敗,返回一個小於0的值。

PyIocp.close(socket_id)

    close()方法用於關閉指定串連。

    我用這個封裝Iocp的模組寫了一個簡單的echo伺服器來測試效能,當串連上4000個用戶端,並進行大量資料通訊的時候,系統的資源佔用量在20%左右。雖然這與網上關於Iocp高效能的指標還有差距。

    讓網路通訊不再成為Python伺服器的效能瓶頸,這就是我要達到的目的。嘻嘻~~ 非常感謝Darkspy,賴勇浩兩位同學給我的意見和協助。

 

    暫時不提供源碼下載,有需要的同學,可以留言留下郵件。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.