2

メッセージをファンアウトするためsend_message(client_id, message)に inを使用しています。google.appengine.api.channel最も一般的なユース ケースは 2 人のユーザーです。一般的なトレースは次のようになります。

痕跡

への 2 つの呼び出しsend_messageは独立しています。レイテンシを節約するためにそれらを並行して実行できますか?

4

2 に答える 2

1

利用可能な非同期 API がないため、カスタム ソリューションを実装する必要がある場合があります。

ネイティブスレッドを既に試しましたか? 理論的には機能する可能性がありますが、GIL のために、xmpp API は I/O によってブロックする必要があります。

カスタム実装には必ずいくらかのオーバーヘッドが伴うため、2 人を超えるユーザー ケースのエクスペリエンスが損なわれない限り、単純なケースでは最適な方法ではない可能性があります。

ただし、別の問題もあります。インスタンスがクラッシュして、最初のメッセージしか送信できなくなった場合はどうなるでしょうか。API はトランザクション対応ではないため、何らかの保護手段が必要です。これが発生する頻度が低いことを考えると、単純な回復モードで十分かもしれませんが、トランザクション メッセージ チャネルの方が魅力的に聞こえるに違いありません。

私の頭の上から、あなたがそれについて行くことができる2つの方法:

  • すべてのメッセージに対してタスクをプッシュします。それらはトランザクションであり、実行が保証されており、ほぼ同じ実行時間で並行して実行されます。最初のメッセージが送信されるまでの時間が長くなりますが、すべてのメッセージ間で一貫性が保たれます。

  • firebaseのように、まさにこのユース ケース用に構築されたサービスを使用してください(強力すぎるかもしれませんが 笑)、私の経験では、チャネル API はあまり一貫性がなく、ゲームのパフォーマンスは圧倒的なので、これによりシステムがさらに改善される可能性があります。

于 2015-03-15T11:54:34.830 に答える