資源描述:
《移動app服務(wù)端架構(gòu)設(shè)計》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、移動App服務(wù)端架構(gòu)設(shè)計-:基礎(chǔ)流程圖。入口服務(wù)1■服務(wù)2■醐庫1■數(shù)據(jù)*2其實有一點還需要加上,就是對json的壓縮和加密,一來給用戶節(jié)約流量,二來防止請求被截取破解我們的參數(shù)。具體先壓縮后加密還是先加密后壓縮這個問題看W求。看到這個架構(gòu)沒計時,你們可能會說如果程序入口掛了,所有的服務(wù)都不可以用了。所以這個架構(gòu)的弱點在程序入口處,因此要有一(多)臺機器做負載,負載的工具可以是HaProxy(軟件)或者F5(硬件)的負載。F5比較昂貴,我沒用過,haproxy的配罝我就不貼了,谷歌一大把。二:Json參數(shù)設(shè)計手機App的靈魂是用戶數(shù)
2、,有了用戶數(shù)才有一切。據(jù)我得到的數(shù)據(jù),0前一款app從開始制作到推廣到注冊到充值的費用是14.6元(閃部數(shù)據(jù))。所以一款A(yù)pp的成功大部分収決于渠道推廣。而一款手機的mac.imsi等數(shù)據(jù)是唯一標(biāo)識一個手機用戶的標(biāo)準(zhǔn)??赡苣硞€用戶換了一款手機,但是還想用以前的賬號登錄,所以userlD也是必不可少的字段。但是會出現(xiàn)一個問題,兩個mac.imsi,userlD,但是他是一個用戶,所以對用廣信息的更新是至關(guān)重要的。但是用戶數(shù)據(jù)的更新不可能放在客戶端,當(dāng)你界面提供了上傳imsi.mac.phonenumber等字段到服務(wù)端時,用戶會義無反
3、顧的選擇否。如果你偷偷上傳用戶的隱私數(shù)據(jù)到數(shù)據(jù)庫,這是國內(nèi)通用做法。不排除被用戶控告的可能性。所以我們要想一起兩全其?美的辦法。每一次都把這些信息上傳上去,美其名曰:唯一標(biāo)識用戶。至于其它的數(shù)據(jù),那是運營哥需要的數(shù)據(jù),可以在數(shù)據(jù)中加上。{"context”:{"userlD??:n1H,npwd":"fuckGfw","imei":”353641012835017",nimsi":"460000000000000”"reqType":{”rt":”xxx"}}每次把context屮的參數(shù)進行更新,保持你所擁有的川戶數(shù)據(jù)是真實值錢的。
4、其屮的rt字段為每次請求的目的(請求類型),它用來區(qū)分每次請求上來我們需要調(diào)用那一臺服務(wù)器的服務(wù)來處理請求。服務(wù)架構(gòu)和數(shù)據(jù)已經(jīng)準(zhǔn)備0K,我們接下來coding.1:請求入口的承載類型選取你足選擇傳統(tǒng)的.aspx頁而為入口還是ashx還足wcf/wcfRest/WebApi這個自巾度很大,具體在項目中的選擇主要看心情。我心情不好,所以選擇.aspx頁面。主入口為Default.aspx頁面,代碼如下2:3:4:5:6:7:8:9:10:if(!IsPostBack)}catch(Exceptionexc)1:protectedvoid
5、Page_Load(objectsender,EventArgse)11:}12:}在主入口處加一個大范闈的catch,而在catch屮輸出系統(tǒng)忙:。嗯,美其名曰:用戶體驗。對json的壓縮我使用了GZip,代碼如下:1234publicstaticclassCompressionHelperIIIIIICompressthebyte[]5:6:7:8:9:10:11:12:13:IIIIIIIIIpub
6、licstaticbyte[]Compress(byte[]input){byte[]output;using(MemoryStreamms=newMemoryStream()){using(GZipStreamgs=newGZipStream(msJCompressionMode.Compress))14151617181920212223242526272829303132gs.Write(inputJ0^input.Length);gs.Close();output=ms.ToArray();}ms.Close();}retu
7、rnoutput;}IIIIIIDecompressthebyte[]IIIIIIIIIpublicstaticbyte門Decompress(byte[]input){Listoutput=newList();using(MemoryStreamms=newMemoryStream(input))33:{34:using(GZipStreamgs=newGZipStream(ms
8、JCompressionMode.Decompress))3536373839404142434445intreadByte=gs.ReadByte();while(readByte!=-1){output.Add((byte)rea