[發明專利]一種基于事件驅動和lua協程的異步通信方法及裝置在審
| 申請號: | 202010791413.1 | 申請日: | 2020-08-07 |
| 公開(公告)號: | CN111897667A | 公開(公告)日: | 2020-11-06 |
| 發明(設計)人: | 戴磊;范淵;吳卓群 | 申請(專利權)人: | 杭州安恒信息技術股份有限公司 |
| 主分類號: | G06F9/54 | 分類號: | G06F9/54;G06F9/52 |
| 代理公司: | 北京集佳知識產權代理有限公司 11227 | 代理人: | 張春輝 |
| 地址: | 310000 浙江省*** | 國省代碼: | 浙江;33 |
| 權利要求書: | 查看更多 | 說明書: | 查看更多 |
| 摘要: | |||
| 搜索關鍵詞: | 一種 基于 事件 驅動 lua 異步 通信 方法 裝置 | ||
本申請公開了一種基于事件驅動和lua協程的異步通信方法、裝置、設備及可讀存儲介質,針對高并發場景下網絡請求耗時較多的問題,本申請利用高性能事件驅動結合lua腳本語言內部的協程特性,在任何一個協程在遇到網絡耗時操作時,都會暫時掛起該協程,并繼續執行下一個協程,所以不會由于部分協程的網絡操作執行慢而耽誤其他協程的執行,實現全程異步無阻塞,顯著提升高并發場景下的通信性能。
技術領域
本申請涉及通信技術領域,特別涉及一種基于事件驅動和lua協程的異步通信方法、裝置、設備及可讀存儲介質。
背景技術
傳統的高并發開發模式一般包括兩種:
一種是多進程或者多線程阻塞式,雖說這種方式也能實現并發,但是當并發量達到千、萬甚至幾十萬時由于線程數或者進程數太多,CPU切換成本非常大,性能會極度下降。
另一種是單進程非阻塞式異步輪詢,比如poll,select等,雖然在高并發情況下沒有進程或者線程間切換的開銷,但是每次都要在所有連接中輪詢遍歷,找到哪些連接有讀寫操作,并發量特別大時也非常耗性能。
可見,如何提供一種高并發場景下的通信方案,提升通信性能,是亟待本領域技術人員解決的問題。
發明內容
本申請的目的是提供一種基于事件驅動和lua協程的異步通信方法、裝置、設備及可讀存儲介質,用以解決當前的通信方案在高并發場景下的性能較低的問題。其具體方案如下:
第一方面,本申請提供了一種基于事件驅動和lua協程的異步通信方法,包括:
利用lua語言聲明目標全局對象,并加載預先創建的非阻塞式的網絡相關函數;
根據所述目標全局對象,生成目標數量的協程;
依次調用每個協程執行相應的lua腳本,若當前協程執行到所述網絡相關函數,則掛起當前協程,將所述網絡相關函數的結果返回事件注冊到操作系統的事件監聽器,調用下一協程直至所述目標數量的協程全部調用完畢;
在所述事件監聽器監聽到所述結果返回事件時,調用相應的協程繼續執行lua腳本。
優選的,在所述利用lua語言聲明全局對象,并加載預先創建的非阻塞式的網絡相關函數之前,還包括:
基于C語言,生成非阻塞式的網絡相關函數。
優選的,所述生成非阻塞式的網絡相關函數,包括:
根據lua自帶的網絡相關函數,生成相應的非阻塞式的網絡相關函數。
優選的,所述依次調用每個協程執行相應的lua腳本,包括:
利用lua語言的resume方法,依次啟動各個協程,依次調用每個協程執行相應的lua腳本。
優選的,所述若當前協程執行到所述網絡相關函數,則掛起當前協程,包括:
若當前協程執行到所述網絡相關函數,則利用lua語言的yield方法,掛起當前協程。
優選的,所述在所述事件監聽器監聽到所述結果返回事件時,調用相應的協程繼續執行lua腳本之后,還包括:
若協程再次執行到所述網絡相關函數,則掛起該協程,將所述網絡相關函數的結果返回事件注冊到所述事件監聽器,繼續等待所述事件監聽器的反饋信息。
優選的,所述根據所述目標全局對象,生成目標數量的協程,包括:
根據待進行通信的客戶端,確定目標數量;
根據所述目標全局對象,生成所述目標數量的協程。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于杭州安恒信息技術股份有限公司,未經杭州安恒信息技術股份有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010791413.1/2.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:一種建筑用懸挑底梁擱置端自脫式錨具
- 下一篇:一種用于加工中心的轉臺夾持裝置





