Azure:無(wú)服務(wù)器異步多玩家游戲參考體系結(jié)構(gòu)

來(lái)源: Microsoft Azure
作者:Microsoft Azure
時(shí)間:2021-01-07
16693
Azure Functions-用于運(yùn)行小塊的匹配邏輯。請(qǐng)注意,使用Consumption計(jì)劃時(shí),函數(shù)定義存儲(chǔ)在File Storage中,這意味著您必須創(chuàng)建Storage帳戶。為了獲得最佳性能,您應(yīng)該使用與Functions位于同一區(qū)域的Storage帳戶。

體系結(jié)構(gòu)關(guān)系圖

multiplayer-async-single.png

體系結(jié)構(gòu)服務(wù)

Azure Functions-用于運(yùn)行小塊的匹配邏輯。請(qǐng)注意,使用Consumption計(jì)劃時(shí),函數(shù)定義存儲(chǔ)在File Storage中,這意味著您必須創(chuàng)建Storage帳戶。為了獲得最佳性能,您應(yīng)該使用與Functions位于同一區(qū)域的Storage帳戶。

Azure Database for MySQL-由于其快速、輕量、可靠且經(jīng)濟(jì)高效,用于存儲(chǔ)信息。

通知中心-一種易用的擴(kuò)展型推送引擎,允許您向多個(gè)平臺(tái)(iOS、Android、Windows、Kindle、百度等)推送通知。

SignalR-簡(jiǎn)化通過(guò)HTTP向應(yīng)用程序添加實(shí)時(shí)網(wǎng)絡(luò)功能的過(guò)程,從而讓您將數(shù)據(jù)推送到已連接的設(shè)備客戶端。

Key Vault-用于管理密鑰(包括數(shù)據(jù)庫(kù)連接字符串)的最佳服務(wù)。

設(shè)計(jì)注意事項(xiàng)

這個(gè)參考體系結(jié)構(gòu)展示了一個(gè)簡(jiǎn)單的無(wú)服務(wù)器“井字棋”游戲。

在這個(gè)參考體系結(jié)構(gòu)中,一個(gè)幫助程序類(數(shù)據(jù)客戶端)將連接到數(shù)據(jù)庫(kù)并與之交互,而其余Functions將在需要時(shí)使用它。游戲會(huì)話類用來(lái)根據(jù)玩家提交的信息運(yùn)行回合,并計(jì)算贏家。支持3種不同的操作事件:forfeit(放棄游戲)、addPlayer(將玩家加入游戲會(huì)話)和takeTurn

部署模板

請(qǐng)查看一般指南文檔,其中有一部分概述了Azure服務(wù)的命名規(guī)則和限制。

備注

如果您對(duì)ARM模板的工作原理感興趣,請(qǐng)參閱此參考體系結(jié)構(gòu)中使用的每個(gè)不同服務(wù)對(duì)應(yīng)的Azure資源管理器模板文檔:

使用Azure資源管理器模板創(chuàng)建事件中心

對(duì)Azure Functions中的函數(shù)應(yīng)用自動(dòng)執(zhí)行資源部署

Azure Database for MySQL模板

Azure通知中心模板

Azure SignaR模板

警告

數(shù)據(jù)庫(kù)管理員的密碼必須包含8到128個(gè)字符。此外,它必須包含以下三種類別的字符:英文大寫字母、英文小寫字母、數(shù)字(0-9)和非字母數(shù)字字符(!、$、#、%等)。

提示

要在本地運(yùn)行Azure Functions,請(qǐng)使用這些相同的應(yīng)用設(shè)置更新local.settings.json文件。

分步操作

創(chuàng)建新游戲會(huì)話

設(shè)備客戶端會(huì)格式化玩家選擇的游戲設(shè)置,并將開始游戲會(huì)話事件發(fā)送到后端,然后等待響應(yīng)。

后端收到開始新游戲會(huì)話的命令。首先,它會(huì)嘗試查找與玩家設(shè)置相匹配的現(xiàn)有游戲會(huì)話。

如果沒(méi)有匹配的合適游戲會(huì)話,將創(chuàng)建一個(gè)新的游戲會(huì)話對(duì)象。

創(chuàng)建一個(gè)新的持久Orchestrator Function。

持久Orchestrator Function將讀取游戲會(huì)話對(duì)象,并且一直等到至少2個(gè)玩家加入此游戲會(huì)話為止。

具有與第一個(gè)玩家所選設(shè)置相同的另一個(gè)玩家將開始游戲會(huì)話事件發(fā)送到后端。

后端收到命令并嘗試查找現(xiàn)有游戲。在這種情況下,它將查找之前創(chuàng)建的游戲會(huì)話。

持久Orchestrator Function接收addPlayer事件,并在兩個(gè)玩家都加入游戲會(huì)話后停止等待。

持久Orchestrator Function正式開始匹配,將游戲狀態(tài)設(shè)置為正在進(jìn)行,并隨機(jī)選擇一個(gè)玩家以開始游戲。簡(jiǎn)而言之,Orchestrator負(fù)責(zé)執(zhí)行游戲邏輯和更新游戲狀態(tài)。

持久Orchestrator Function觸發(fā)一個(gè)操作以將數(shù)據(jù)保存到數(shù)據(jù)庫(kù)中。它利用數(shù)據(jù)客戶端幫助程序類來(lái)連接到數(shù)據(jù)庫(kù),以保存數(shù)據(jù)。

持久Orchestrator Function運(yùn)行游戲會(huì)話邏輯,并返回“輪到下一個(gè)玩家開始”。

它根據(jù)游戲條件將排隊(duì)通知發(fā)送給一個(gè)玩家或多個(gè)玩家(輪到別的玩家、有玩家勝出、有玩家棄權(quán),等)。

持久Orchestrator隨后自行調(diào)用新游戲狀態(tài),并等待接收下一個(gè)事件。

設(shè)備客戶端收到通知,包括管理游戲會(huì)話的Orchestrator Function的唯一標(biāo)識(shí)符。

設(shè)備客戶端將加載游戲會(huì)話事件發(fā)送到后端,包括在通知中收到的持久Orchestrator的唯一標(biāo)識(shí)符。

后端收到加載游戲會(huì)話的命令,并返回要由設(shè)備客戶端顯示的游戲會(huì)話的詳細(xì)信息。

玩家將一個(gè)X或O直接提交到持久Orchestrator Function,這一輪結(jié)束。

請(qǐng)求玩家游戲列表

設(shè)備客戶端向后端提交獲取會(huì)話列表命令。

后端通過(guò)查詢數(shù)據(jù)庫(kù)來(lái)處理該請(qǐng)求,然后將數(shù)據(jù)發(fā)送到設(shè)備客戶端。請(qǐng)考慮對(duì)查詢返回的結(jié)果數(shù)量做出限制并進(jìn)行排序。

設(shè)備客戶端收到后端響應(yīng),使用它所包含的數(shù)據(jù)來(lái)填充相關(guān)UI。

實(shí)現(xiàn)示例

讀者練習(xí)

提供的示例不包含用于標(biāo)注從數(shù)據(jù)庫(kù)進(jìn)行讀取的邏輯,而僅僅是寫入邏輯。請(qǐng)考慮使用緩存保護(hù)數(shù)據(jù)庫(kù)或擴(kuò)展數(shù)據(jù)庫(kù),以避免耗盡指向數(shù)據(jù)庫(kù)的連接。

安全注意事項(xiàng)

不要將數(shù)據(jù)庫(kù)連接字符串硬編碼到Function的源代碼中。但至少應(yīng)充分利用函數(shù)應(yīng)用設(shè)置,或者,若要獲取更高的安全性,請(qǐng)改用密鑰保管庫(kù)。有一個(gè)指南介紹如何創(chuàng)建密鑰保管庫(kù)、如何將托管服務(wù)與函數(shù)標(biāo)識(shí)結(jié)合使用,以及如何從函數(shù)中讀取存儲(chǔ)在密鑰保管庫(kù)中的機(jī)密。

備選方案

這個(gè)參考體系結(jié)構(gòu)中使用了Azure Database for MySQL,但可以將它替換為Azure SQL數(shù)據(jù)庫(kù)或Azure Database for PostgreSQL。

其他資源和示例

使用持久Function和Azure SignalR服務(wù)的益智答題游戲

multiplayer-async-trivia.png

盡管它不是完全異步的(運(yùn)行一個(gè)20秒的計(jì)時(shí)器),您可以在此鏈接找到用持久Function和Azure SignalR服務(wù)構(gòu)建的益智答題游戲的實(shí)施。問(wèn)題是從jservice.io檢索的。要查看它的運(yùn)行情況,請(qǐng)參閱此鏈接。

以下是它的工作原理:

益智答題游戲托管方啟動(dòng)游戲,按照部署或通過(guò)網(wǎng)絡(luò)請(qǐng)求調(diào)用HttpStartSingle Azure Functions。

該Azure Functions啟動(dòng)TriviaOrchestrator Durable Azure Functions。

玩家加入游戲。運(yùn)行應(yīng)用的每個(gè)玩家的設(shè)備客戶端都從后端檢索Azure SignalR服務(wù)中心詳細(xì)信息。后端通過(guò)SignalRInfo Azure Functions接收該請(qǐng)求。函數(shù)綁定通過(guò)在連接字符串中使用鍵生成一個(gè)標(biāo)記,然后將其發(fā)送到設(shè)備客戶端。設(shè)備客戶端設(shè)置要偵聽的來(lái)自Azure SignalR服務(wù)的兩個(gè)事件:newClue和newGuess。

在后端,TriviaOrchestrator Durable Azure Functions調(diào)用GetAndSendClue Durable Azure Functions。

TriviaOrchestrator Durable Azure Functions將計(jì)時(shí)器設(shè)置為每隔20秒調(diào)用一次,即玩家必須在這段時(shí)間內(nèi)響應(yīng)問(wèn)題。

GetAndSendClue Durable Activity Azure Functions從jservice.io服務(wù)中拉取一個(gè)問(wèn)題。

然后問(wèn)題通過(guò)Azure SignalR服務(wù)廣播到所有具有目標(biāo)*newClue*的已連接用戶。

玩家收到來(lái)自Azure SignalR服務(wù)的問(wèn)題,并提供他們的答案。

后端通過(guò)SubmitGuess Azure Functions接收玩家的響應(yīng)。

此Azure Functions計(jì)算玩家提交的答案是否正確。然后,結(jié)果通過(guò)Azure SignalR服務(wù)廣播到所有具有目標(biāo)newGuess的已連接用戶。

設(shè)備客戶端收到來(lái)自Azure SignalR服務(wù)的響應(yīng),并更新回答正確或回答錯(cuò)誤的次數(shù)。

立即登錄,閱讀全文
版權(quán)說(shuō)明:
本文內(nèi)容來(lái)自于Microsoft Azure,本站不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。文章內(nèi)容系作者個(gè)人觀點(diǎn),不代表快出海對(duì)觀點(diǎn)贊同或支持。如有侵權(quán),請(qǐng)聯(lián)系管理員(zzx@kchuhai.com)刪除!
相關(guān)文章
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
Azure Arc為企業(yè)構(gòu)建安全的云基礎(chǔ)
隨著人工智能技術(shù)持續(xù)重塑企業(yè)運(yùn)營(yíng)方式,企業(yè)需要能夠處理海量數(shù)據(jù)的系統(tǒng),以支持實(shí)時(shí)洞察,同時(shí)幫助他們應(yīng)對(duì)跨IT和OT環(huán)境(包括云端、邊緣和本地)中運(yùn)營(yíng)、應(yīng)用、數(shù)據(jù)和基礎(chǔ)設(shè)施的協(xié)作難題。
Azure
微軟云
云服務(wù)
2024-12-172024-12-17
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來(lái)
釋放.NET 9和Azure的AI技術(shù)與云計(jì)算潛力:更快、更智能、面向未來(lái)
.NET 9現(xiàn)已正式發(fā)布,它為.NET平臺(tái)的發(fā)展掀開了嶄新的一頁(yè),突破了性能、云原生開發(fā)和AI技術(shù)集成的邊界。
Azure
微軟云
云服務(wù)
2024-12-162024-12-16
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
Azure網(wǎng)絡(luò)管理現(xiàn)已具備智能Microsoft Copilot副駕駛能力
智能Microsoft Copilot副駕駛for Azure網(wǎng)絡(luò)服務(wù)現(xiàn)已推出公共預(yù)覽版。
Azure
微軟云
云服務(wù)
2024-12-102024-12-10
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
Microsoft Fabric功能更新,借助AI驅(qū)動(dòng)的數(shù)據(jù)平臺(tái)加速應(yīng)用創(chuàng)新
一年前,我們正式推出了一款端到端數(shù)據(jù)平臺(tái),旨在幫助組織推動(dòng)人工智能轉(zhuǎn)型,并重新定義數(shù)據(jù)的連接、管理和分析方式。
Azure
微軟云
云服務(wù)
2024-12-092024-12-09
掃碼登錄
打開掃一掃, 關(guān)注公眾號(hào)后即可登錄/注冊(cè)
加載中
二維碼已失效 請(qǐng)重試
刷新
賬號(hào)登錄/注冊(cè)
個(gè)人VIP
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家