GS2-Friend のフレンド申請の上限処理が改善されました
はじめに
GS2-Friend はゲーム内のプレイヤー同士の関係を管理するマイクロサービスで、単方向のフォロー、双方向のフレンドを管理できます。
フレンドは申請を出し、承認されることで関係を構築できますが、フォローは承認プロセスなしで関係を構築できます。
今回改善されたのはフレンドの申請についてです。
機能追加の背景
GS2-Friend はさまざまな値の条件が絡み、エラー処理が複雑になりがちでした。
具体的にはフレンドについては以下の3つの上限が存在しました。
| 自分が他人に送信し、未承諾のフレンド申請数の上限 | 1000 |
| 他人が自分に送信し、未承諾のフレンド申請数の上限 | 1000 |
| フレンド関係が成立したプレイヤー数の上限 | 1000 |
それぞれの上限を考慮するとエラーのバリエーションは以下のパターンがあります。
申請時のエラーパターン
・自分のフレンド人数が上限に達している
・自分が他人に送信し、未承諾のフレンド申請が上限に達している
・申請相手が受信した、未承諾のフレンド申請が上限に達している
承認時のエラーパターン
・自身のフレンド人数が上限に達している
・相手のフレンド人数が上限に達している
このようなエラーを考慮した上で申請・承認プロセスを実装するのは困難な作業で、数も多いためデバッグをするのも大変でした。
仕様変更の内容
上限の値が以下に見直されました。
| 自分が他人に送信し、未承諾のフレンド申請数の上限 | 1000 - 自分のフレンド人数 |
| 他人が自分に送信し、未承諾のフレンド申請数の上限 | 1000 |
| フレンド関係が成立したプレイヤー数の上限 | 1000 |
この上限の見直しにより「他人から届いたフレンド申請を承認しようとしたら、相手のフレンド枠がいっぱいで承認できなかった」という状態がなくなり、一つエラーハンドリングするべきエラーがなくなります。
つづけて、未承諾のフレンド申請がロールアウトする仕組みが導入されました。
未承認のフレンドリクエストがすでに1000件あるプレイヤーにフレンド申請を出した時、以前であれば「フレンド申請枠がいっぱい」というエラーが発生していました。
ここを「最も古いフレンド申請をキャンセルして、新しいフレンド申請を追加する」という挙動に変更しました。
これにより、フレンド申請時に発生するエラーを一つ減らすことができます。
さらに、フレンド申請時にはもう一つ「自分が他人に送信し、未承諾のフレンド申請数の上限」についても考慮が必要です。
ここも、「自分が他人に送信し、未承諾のフレンド申請数の上限 」が最大値(1000 - 自分のフレンド人数)に達している場合は、最も古いフレンド申請をキャンセルして新しいフレンド申請を追加するという挙動に変更されました。
これにより、フレンド申請時に発生するエラーを一つ減らすことができます。
このような今回の仕様変更の結果、考慮しなければならないエラーは以下のようになります
申請時のエラーパターン
・自分のフレンド人数が上限に達している
承認時のエラーパターン
・自身のフレンド人数が上限に達している
他人のデータを参照せずに処理ができるようになるためシンプルに処理を実装することができるようになりました。