9. ● Frontend API
クライアントが接続するエンドポイント
● Frontend API が提供する gRPC サービス
service API {
rpc CreateRequest(Group) returns (Result) {}
rpc DeleteRequest(Group) returns (Result) {}
rpc GetAssignment(PlayerId) returns (ConnectionInfo) {}
rpc DeleteAssignment(PlayerId) returns (Result) {}
}
Frontend API
Frontend
API
Redis
10. ● Request (リクエスト)はクライアントが OM に「相手を探して」というリクエスト
● Assignment (割り当て)はゲームサーバが OM に「プレイヤーをちょうだい」というリクエスト
Request & Assignment
Frontend
API
Backend
API
Redis
Director
CreateRequest() CreateAssignments()
11. ● Group と PlayerId の属性
message Group {
string id = 1; // By convention, string of space-delimited playerIDs
string properties = 2; // By convention, a JSON-encoded string
}
message PlayerId {
string id = 1; // By convention, a UUID
}
● Group の Properties 属性はマッチングの決断に必要となる属性(ラ
ンク、キャラクラス、武器、レイテンシ、など)
Group & PlayerId
12. ● Frontend API の役割
○ クライアント、またはロビーサーバからマッチングの
リクエストを受信して、 Redis にプレイヤーの情報を書き込む
○ マッチングが成功してら
■ MMF が Redis に結果を書き込む
■ クライアントに接続先の情報を返す
Frontend API
Frontend
API
Redis
31. マッチングの Flow chart (1/3)
Frontend
API
Key=PlayerA
Connstring=NULL
Player A
CreateRequest(PlayerA)
GetAssignment(PlayerA)
Key=PlayerB
Connstring=NULL
Player B
CreateRequest(PlayerB)
GetAssignment(PlayerB)
Key=PlayerC
Connstring=NULL
Player C
CreateRequest(PlayerC)
GetAssignment(PlayerC)
Key=PlayerD
Connstring=NULL
Player D
CreateRequest(PlayerD)
GetAssignment(PlayerD)
write
watch
write
watch
write
watch
write
watch
32. マッチングの Flow chart (2/3)
Orchestrator
queues.profile.name
queues.proposals.name
queue
Key=Request_ID
Value=Matching_result
Key=Proposal_ID
Value=Matching_proposal
Key=Profile name
Value=Profile
Evaluator
watch for
result
watch
Director
trigger MMF read
profile
triggerEvaluator
MMF
receive
result
write
profile
write
results
read
read
proposal
Backend
API
queue
approve
results
Director
CreateMatch()
33. マッチングの Flow chart (3/3)
Director
CreateAssignments()
Key=PlayerA
Connstring=ip:port
Key=PlayerB
Connstring=ip:port
Key=PlayerC
Connstring=ip:port
Key=PlayerD
Connstring=ip:port
Update
connection
string
Backend
API
Player A
Player D
Player C
Player B
Frontend
API
watch
&
send