歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

應用Python快速實現系統原型

[摘要] 快速原型是在開發真實系統之前,構造一個原型,在該原型的基礎上,逐漸完成整個系統的開發工作。Python非常易於使用,並且支持Windows/Mac/Unix/Linux/Solaris多操作系統平台,可以幫助開發人員在這些平台上更迅速地完成任務。同時Python擁有一個強大的基本類庫和數量眾多的第三方擴展庫,所以它的應用范圍也比較廣泛。文章舉例說明,如何應用Python快速實現一個異步多線程的前置機系統。

[關鍵詞] 動態編程語言  快速原型開發 前置機 模擬系統

一、系統背景

在開發跨平台業務系統的時候,為了確保後台服務器的數據安全,客戶端通常是與交易前置機通訊,發送交易請求,交易前置機接收交易請求,然後與後台服務器交互,從後台獲得該交易的返回數據後,再按照交易報文的格式返回給客戶端。

交易前置機所使用的操作系統情況較復雜,一般要根據客戶單位的具體情況,有些采用Windows系統,有些采用Unix/Linux或者Solaris系統。但在去客戶單位進行項目實施之前,開發人員需要在開發過程中隨時進行客戶端交易的調試工作,這就需要有個模擬交易前置機的系統,在調試過程中能非常方便的修改交易報文的定義,模擬後台返回的交易報文。在某些系統的開發中,這個模擬系統就可以作為一個完整系統的原型,開發系統的過程,就是在此原型基礎上,逐漸完善交易類型與交易返回數據,最後完成整個系統的開發。

模擬系統的開發可以用多種方法來實現,而動態語言Python易於使用、類庫豐富、修改方便。本文要闡述的是利用Python來進行模擬系統的開發,快速實現交易前置機最常用的功能:接收交易請求、組織返回數據、發送返回數據。

二、  Python的異(非阻塞)通訊

asyncore庫是python的一個標准庫,它是一個異步socket的包裝。我們在進行網絡通訊的時候可以直接使用socket等底層的庫,但是asyncore使得我們可以更加方便的進行網絡通訊,避免直接使用socket,select,poll等工具時需要面對的復雜處理。

asyncore庫很簡單,只包含了一個loop()函數和一個dispatcher基類。每一個從dispatcher繼承的類的對象,都可以看作我們需要處理的一個socket,可以是TCP連接或者UDP。

asyncore庫使用容易,我們只需要定義一個類,它繼承dispatcher,然後我們重寫(覆蓋)一些方法就可以了。我們需要重寫的方法一般都以handle_打頭的。

loop()函數負責檢測一個字典,字典中保存dispatcher的實例,這個字典被稱為channel。每次創建一個dispatcher對象,都會把自己加入到一個默認的字典裡面去。當對象被加入到channel中的時候,socket的行為都已經被定義好,程序只需要調用loop(),異步多線程通訊功能就准備好了。

三、  專注於業務處理

在我們的模擬系統中,由於需要同時為多個客戶端服務,定義了一個主通訊服務類,繼承自asyncore.dispatcher類,重寫該類的handle_accept方法,從這裡獲得客戶端的連接,向控制台輸出客戶端IP與端口信息,並轉發給處理線程類。

處理線程類繼承自asyncore.dispatcher_with_send,此類可以接收和發送數據,只需要重寫handle_read方法即可。

這樣,一個異步多線程的交易模擬系統就可以運行了。

每當客戶端有數據發送過來,就會觸發handle_read方法。在此方法中,可以對交易數據進行合法性判斷、提取交易類別、提取交易數據、組織交易返回數據、發送數據到客戶端,通過這一系列的處理,一個交易的完整過程就完成了。

在這裡,通過對交易類別的判斷,可以很容易的增加新的交易。

Copyright © Linux教程網 All Rights Reserved