工作后好久沒上博客園了,雖然不是很忙,但也沒學(xué)生時(shí)代閑了。今天上博客園,發(fā)現(xiàn)好多的文章都是年終總結(jié),想想是不是自己也應(yīng)該總結(jié)下,不過現(xiàn)在還沒想好,等想好了再寫吧。今天寫寫自己在工作后用到的技術(shù)干貨,爭(zhēng)取以后多上博客園寫寫總結(jié)吧,真是懷念學(xué)生時(shí)代?。。?!

背景

     項(xiàng)目組開發(fā)的游戲客戶端使用的腳本是python,服務(wù)器也是python。之所以選擇python,主要還是基于開發(fā)效率的考慮,畢竟這是腳本語言天生的優(yōu)勢(shì);其次就是有很多庫(kù),不用自己再造輪子了。可能使用過python的同學(xué)都會(huì)認(rèn)為python比較耗,運(yùn)行效率不高,一個(gè)簡(jiǎn)單的賦值語句就包含了多個(gè)對(duì)象的生成和釋放。但其實(shí)現(xiàn)在服務(wù)器的性能非常好,通常性能都是過剩的,所以python在服務(wù)器上高效地跑是完全沒問題的;至于客戶端,性能的瓶頸主要還是在引擎層,在一幀中最多也就20%的時(shí)間在執(zhí)行腳本,超過太多說明邏輯寫的有問題或者可以分?jǐn)偟蕉鄮?zhí)行。本文主要介紹下在使用python腳本的情況下解決線上問題的幾種有效技術(shù),其它語言應(yīng)該也有類似的技術(shù),特別是腳本語言,這里只是做個(gè)拋磚引玉~~

熱更新(hotfix)

     這種技術(shù)主要是針對(duì)情況比較緊急,并且bug是腳本邏輯錯(cuò)誤導(dǎo)致的。如客戶端邏輯寫的有問題導(dǎo)致出現(xiàn)exception,使得玩家某個(gè)玩法不能玩,或者是服務(wù)端某個(gè)代碼邏輯寫的有問題。這種技術(shù)實(shí)現(xiàn)的主要思路是(以熱更新客戶端為例):服務(wù)器將修正的代碼發(fā)送到客戶端,客戶端動(dòng)態(tài)執(zhí)行這段代碼來修復(fù)bug。用python來實(shí)現(xiàn)這個(gè)其實(shí)非常簡(jiǎn)單,只需要在客戶端內(nèi)嵌的python虛擬機(jī)中動(dòng)態(tài)編譯服務(wù)端發(fā)過來的代碼,并執(zhí)行這段代碼就行了。例如:現(xiàn)在客戶端有下面一段的代碼,這段代碼是有錯(cuò)誤的。

1 #模塊test2 3 def not_has_a(x):4     return hasattr(x, 'a')

      本來上面代碼是希望x對(duì)象沒有a屬性后返回True,但現(xiàn)在情況正好反過來了?,F(xiàn)在我們需要寫一段代碼來修正這個(gè)問題,也就是寫一段代碼給python虛擬機(jī)執(zhí)行,動(dòng)態(tài)修改test模塊中not_has_a函數(shù)的定義。這個(gè)在python中很好實(shí)現(xiàn)的,因?yàn)閜ython中函數(shù)也是一個(gè)對(duì)象,模塊中只是根據(jù)函數(shù)名來索引對(duì)應(yīng)的函數(shù)對(duì)象的,所以我們只需要重新定義一個(gè)新的not_has_a函數(shù)對(duì)象,將模塊中根據(jù)not_has_a函數(shù)名索引的對(duì)象指向新定義的函數(shù)對(duì)象就行。具體代碼如下:

        		

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式