メッセージをファンアウトするためsend_message(client_id, message)
に inを使用しています。google.appengine.api.channel
最も一般的なユース ケースは 2 人のユーザーです。一般的なトレースは次のようになります。
への 2 つの呼び出しsend_message
は独立しています。レイテンシを節約するためにそれらを並行して実行できますか?
メッセージをファンアウトするためsend_message(client_id, message)
に inを使用しています。google.appengine.api.channel
最も一般的なユース ケースは 2 人のユーザーです。一般的なトレースは次のようになります。
への 2 つの呼び出しsend_message
は独立しています。レイテンシを節約するためにそれらを並行して実行できますか?
利用可能な非同期 API がないため、カスタム ソリューションを実装する必要がある場合があります。
ネイティブスレッドを既に試しましたか? 理論的には機能する可能性がありますが、GIL のために、xmpp API は I/O によってブロックする必要があります。
カスタム実装には必ずいくらかのオーバーヘッドが伴うため、2 人を超えるユーザー ケースのエクスペリエンスが損なわれない限り、単純なケースでは最適な方法ではない可能性があります。
ただし、別の問題もあります。インスタンスがクラッシュして、最初のメッセージしか送信できなくなった場合はどうなるでしょうか。API はトランザクション対応ではないため、何らかの保護手段が必要です。これが発生する頻度が低いことを考えると、単純な回復モードで十分かもしれませんが、トランザクション メッセージ チャネルの方が魅力的に聞こえるに違いありません。
私の頭の上から、あなたがそれについて行くことができる2つの方法:
すべてのメッセージに対してタスクをプッシュします。それらはトランザクションであり、実行が保証されており、ほぼ同じ実行時間で並行して実行されます。最初のメッセージが送信されるまでの時間が長くなりますが、すべてのメッセージ間で一貫性が保たれます。
firebaseのように、まさにこのユース ケース用に構築されたサービスを使用してください(強力すぎるかもしれませんが 笑)、私の経験では、チャネル API はあまり一貫性がなく、ゲームのパフォーマンスは圧倒的なので、これによりシステムがさらに改善される可能性があります。