我正在創建一個網站,允許玩家排隊尋找類似技能的多人遊戲視頻遊戲。簡單的網絡後端只修改一個數據庫,並使用模板創建響應,但除此之外,我的後端有:當Web後端不僅僅是回覆請求時,應該如何構建我的應用程序?
- 溝通與玩家在實時(通過GEVENT-socketio),而他們排隊或播放
- 在後臺運行的計算來找到平衡的遊戲,慢慢地影響遊戲質量,等待時間長(並通過SocketIO通知玩家在遊戲已發現)通過UDP套接字進行遊戲
- 監視器(如果玩家斷開連接,詢問隊列替代)並最終更新數據庫結果
我知道我會如何單獨做這些事情,但我想知道如何分開這些組件並讓它們進行通信。我想象我的Web框架(Flask)在其他方面不應該參與其中。
由於我已經必須使用gevent,我目前正計劃爲這些任務中的每一個啓動單獨的greenlet。這將適用於我所有的任務(可能計算例外),因爲它們通常會等待發生的事情。但是,這不會擴展,因爲我無法運行更多的Flask實例。一切都將取決於在單個線程中運行的greenlet。
那麼這是最好的方式?是否有另一種方法來處理分離這些任務(特別是對於將來可能沒有協同程序的語言)?我聽說過RabbitMQ/ZeroMQ和Celery等工具,但我不確定如何以及是否用它們來解決這個問題。
我想。 HTTP不是必需的。使用簡單的純文本或序列化結構的Socketio就足夠了。 – arilou