[發明專利]網絡游戲服務器陷入死循環的處理方法有效
| 申請號: | 201410050333.5 | 申請日: | 2014-02-14 |
| 公開(公告)號: | CN103810053B | 公開(公告)日: | 2017-06-13 |
| 發明(設計)人: | 劉德建;陳宏展;郭銳;陳南 | 申請(專利權)人: | 福建天晴數碼有限公司 |
| 主分類號: | G06F11/07 | 分類號: | G06F11/07 |
| 代理公司: | 福州市鼓樓區京華專利事務所(普通合伙)35212 | 代理人: | 宋連梅 |
| 地址: | 350000 福*** | 國省代碼: | 福建;35 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 網絡游戲 服務器 陷入 循環 處理 方法 | ||
1.網絡游戲服務器陷入死循環的處理方法,其特征在于:包括如下步驟:
第一步驟:死循環的檢測:
在主線程處理消息前,將這些消息的每一個唯一id、類型和當前時刻記錄下來,保存在一個可多線程訪問的結構類型的數據里,然后調入到Lua腳本程序里對這些消息進行處理,處理完后回到C++程序里時,再將這些消息清空;監護線程以固定的頻率來檢測這些消息的處理情況,不同的消息通過消息的唯一id來標識,如果每次檢測時,發現都是在同一個消息的處理狀態中,并且處理時間已經超過了最大值,那么就判斷Lua腳本程序陷入了死循環,并因此間接導致主程序陷入死循環;
第二步驟:死循環的恢復:
當判定主線程陷入死循環后,監護線程就將主線程掛起,使它暫時停止運行,然后取得Lua腳本程序實例,就是lua_State對象,然后通過Lua腳本程序庫的接口,取得當前的運行堆棧,記錄到日志中,方便查出到底是哪里的代碼引起了死循環;然后取得Lua腳本程序實例中的_G全局變量,將_G這個table中的所有變量和函數,移到另外一個新建的table,清空_G變量里的數據;然后監護線程將主線程設置為進入“Lua腳本程序死循環錯誤狀態”,然后再恢復主線程的運行,當主線程里的Lua腳本程序代碼訪問到_G里的變量或函數,會觸發Lua錯誤,就會跳回到C++程序里,主線程就成功地從死循環中跳出來了;跳回到C++程序里后,檢測到當前是“Lua腳本程序死循環錯誤狀態”,就將Lua腳本程序中的_G_BACKUP存儲的變量和函數取出,設置回_G全局變量中,就恢復了Lua腳本程序的正常運行環境。
2.如權利要求1所述的網絡游戲服務器陷入死循環的處理方法,其特征在于:
所述監護線程將Lua腳本程序實例中的_G變量清空的同時,會記錄下當前處理的消息類型,然后當主線程恢復到正常運行狀態時,如果有客戶端又上發了這個類型的消息,服務器將會丟棄這個消息而不再處理。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于福建天晴數碼有限公司,未經福建天晴數碼有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/201410050333.5/1.html,轉載請聲明來源鉆瓜專利網。





