2014年6月4日,6月的第一個星期三,我正式入職百度,開始baiduer的工作。這不到2個月的時間,因為人力資源這邊原因,我從INF部門離開,拉到了百度Hi-Server團隊中來。2個完全不著調的崗位,做了許多以前沒有做過的事情??偨Y一下:在INF的產品線是新產品,9月百度世界大會才上線的,很多東西不便透露;百度Hi-Server產品線相對來說就算是個老產品了,持續做了好幾年了。7月中旬切到Hi-Server這邊,不到這一個月的時間,主要Support了三個事情:一個登錄樁的實現和一個公眾平臺iOS消息推送,還有消息報文協議的單測。登陸樁的實現用的是Python語言完成的,主要的時間消耗在公司自定義的2個類的實現。公眾平臺iOS消息推送則是在原有項目的基礎上增加了一些代碼,以便于支持公眾賬號信息的推送力。消息報文的單測,使用的是gtest測試框架,使用基于參數化的方案實現的。關于gtest單測,這個系列帖子算個精華帖:http://www.CUOXin.com/coderzh/archive/2009/04/08/1431297.html.今天主要和大家分享一下登陸樁實現中遇到的一些問題!
一、登陸樁做什么?
項目需要做一些線下的壓力測試,主要是針對新增的一些模塊的性能進行測評,所以需要提供一個模擬登陸服務的樁以Support這個測評工作。登陸樁它是個Mock的登陸服務,在接收到登陸請求以后,模擬真實的登陸服務,構造一個認證后的串作為響應報文返回,達到模擬登陸的目的。
二、登陸樁該怎么做?
根據上面對登陸樁需求的分析,我們可以把登陸樁的實現劃分如下:
1. 監聽服務:建立一個TCP連接,在指定端口監聽登陸請求;
2. 解析請求包:收到的請求包是按照一定格式壓縮加密而來的,樁需要對其解密解壓縮把我們需要關注的字段取出來;
3. 構造響應包:根據我們解析后的請求報文,我們按照真實登陸服務的響應報文格式去構造該條請求報文所對應的響應報文,然后對該報文壓縮加密后響應給請求方;
4. 并發性:樁需要支持多個賬戶并發模擬登錄,所以我們需要實現的服務應該是一個多線程的。
三、大刀闊斧實現登陸樁!
請求響應報文的格式涉及到公司的機密,所以不在這里詳細表述。報文主要的思路就是:
實例-->Json化-->pack-->加密-->發送----------------接收--------------->解密-->unpack-->反Json化-->得到具體的字段信息.
構造響應包-->Json化-->pack-->加密-->響應!
今天的主要內容是并發Socket的使用,在Python中,使用SocketServer模塊建立連接,SocketServer.ThreadingTCPServer類支持并發TCP連接。那么該怎么使用這個并發TCP服務呢?讓我們一步步慢慢來。
首先就是實現一個自定義的TCPHandle類了,我是這樣定義的:
1 class MyTCPHandle(SocketServer.StreamRequestHandler):
在該自定義類中,需要實現handle方法:
1 def handle(self):
最后就是在main中去建立TCP連接:
1 mockserver = SocketServer.ThreadingTCPServer(('', int(sys.argv[1])), MyTCPHandle)
第二個參數是服務的端口,我是通過傳參的方式去完成的。
最后,TCP開始了忙碌的工作:
1 mockserver.serve_forever()
這篇日志,從7月28就開始寫,一直忙工作,時間抽不出來,今天算是下定決心給寫完了。不過看內容方面,明顯和我當時打算寫日志時候差了很多,就這樣吧,希望能多少幫到大家一點!
Published with Windows LiveWriter.
新聞熱點
疑難解答