Open atori74 opened 3 years ago
やっぱり サーバーごとに[]Roomを持っておいて Roomに1つPubsubListenerをもたせるのがいいかもしれない
実装は少し複雑になるかもしれないが
一つのRoomについて ServerA (100クライアント)とServerB(100クライアント)に分散しているとしたら サーバーとPubsubブローカーとの間でかわされるメッセージ数は (1Publishあたり)
RedisでなくGCPのPubsubなどを使う場合、送受信のメッセージ数に応じて課金される これが接続しているユーザー数になるか、サーバー数*Room数になるかではぜんぜん違う
concurrencyブランチで、cloud pubsubを使って実装し、publisherをサーバーにつき一個で共有する形にした だが、よく考えたらメッセージ数が多いのはsubscribeの方だからこっちをRoomごとに共有するべきだった
同じサーバー上で複数のクライアントが同じチャンネルに対して別々にSubscribeするのは非効率
同じメッセージを受け取るわけなので、実質的にサーバーごとに1チャンネルあたりせいぜい1個のSubscribeで十分