Home

edvakf edited this page Jan 8, 2016 · 6 revisions
Clone this wiki locally

アイデア

  • 絵チャ
  • 見てる人全員にブロードキャスト
  • SVG
  • クライアントに構築されるSVGのDOM構造が変わらなければプロトコル等は変更してもよい
  • シードデータは回転させたり移動させたりして量産できそう
  • サーバーサイドでサムネイル生成
  • 初期実装はロングポーリングで、Server-Sent EventやWebSocketにしても良い
  • 初期実装はJSONで、msgpackにしても良い
  • または初期実装は毎フレーム構築済みSVG全体を送ってて、差分だけ送るようにしてすればスコアが上がる
  • クライアントのJSは変更しても良い
  • ベンチマーカーはPhantomJS?
  • 2ch風スレッドフロート掲示板で、一つ一つのスレッドが絵チャのルーム
  • そもそもキャッシュしにくいアプリにしてログイン不要にしたら実装が楽そう
  • ルームごとにサーバーを分けるとスコアが上がる
  • C10Kを超えるとスコアが上がる(ベンチマーカーのローカルポートが問題になる…)
  • CPUバウンド→帯域バウンド→コネクション数バウンドみたいな感じにできると良い
  • ルームの最初から現在地点までを早送りで再生する機能
  • または数ストロークごとの途中経過サムネイル一覧が表示されてる
  • 1秒以内に反映されたストローク数×クライアント数
  • ルーム入室時にAPIエンドポイントを返すことにして、そのIPを変えることで複数台サーバーにリクエストを分散させられる
  • http://qiita.com/n0bisuke/items/2c33b29ad4aa009ea2f6

2016/1/9

  • PHPのことを考えて、WebSocketではなServer-Sent Eventsを使う予定
  • チャットルームに入ると、メインのキャンバスにお絵かきができるのと、サイドバーに最新のキャンバスの内容がサムネイルでN枚表示される
  • サイドバーは3秒おきにリロードされる。ここは普通に1リクエストあたり1点+SVGが全部でN点
  • メインのキャンバスでは、1人が描いた内容が1秒以内にブロードキャストで配信された相手の数が点数
  • 最初はサイドバーのSVGを馬鹿正直に毎回生成しててCPUがボトルネックで、次にSVG転送の帯域がボトルネックで、SVGをgzipしたりするとコネクション数(C10K)がボトルネックになって、そこも突破するとまた帯域がボトルネックになるみたいな感じにできそう
  • 3秒おきにリロードするやつはKeep-Aliveを有効にすればコネクション数捌けるが、Server-Sent Eventsも含めてHTTP/2にすればコネクション1本になってヘッダー圧縮も効いてさらにお得
  • Server-Sent EventsとHTTP/2でWebSocketを超えられる?
  • 1ルームあたりの同時接続数を表示するのはNode.jsみたいなpreforkしないアプリケーションじゃないとかなり面倒っぽいので、そこを問題にしてもいいかも