« Scalaアプリケーションの最速Herokuデプロイ | メイン | 祝 Salesforceハッカソン入賞 »

2014年12月14日 (日)

東京リージョンさえあれば。。。

Winsalesforce

今回Salesforceのハッカソンに参加するにあたり、小西はちょっとしたゲームを作成したんですが、まぁWebSocketでUS EASTにつなぐのは遠すぎるということを改めて実感しました。(--

ちなみにそこでやろうとしていた処理は定間隔で2つのクライアントから送信されるコマンドを両方のクライアントで同時に実行するというものでした。

最初は

  • クライアント側でタイマをそれぞれ実行し、
  • サーバ側で両方のコマンドが揃ったら、
  • ブロードキャストする

という実装をしてみたんですが、クライアント側のタイマってけっこうずれるんですよね。。。(--

特にMac Safariはバックエンドにまわるとタイマがかなり遅延するので、この実装は速攻でボツ。

次にやったのは

  • サーバ側でタイマを実行し、
  • 定間隔で両クライアントにコマンドリクエストを送信し、
  • それに反応したクライアントがコマンドを送信し、
  • サーバ側で両方が揃ったら、
  • ブロードキャストする

という実装です。

こちらの実装はローカルでは割と想定通りに動いてました。

。。。が、Herokuで実行するとクライアント側でのコマンド実行が安定せず、しばらく動かなかったり、連続で複数コマンドが実行されたりという現象が発生しました。

ちゃんと調べてませんが、上記の実装では

  • サーバからのコマンドリクエスト
  • クライアントからのコマンド送信
  • サーバからのコマンドペア送信

と3つの電文が跳んでいるので、そのそれぞれに太平洋越えのレイテンシがかかった結果そのような挙動になったと思われます。(イマイチ納得いってない部分もあるんですが。)

しょうがないので、最終的に先の実装に加えて

  • クライアント側は受け取ったコマンドをすぐには実行せずに一度キューに入れる
  • クライアント側のタイマでキュー内のコマンドを定間隔で実行

としました。

この変更によって2つのクライアントで同時に画面が動くという面白さは損なわれましたが、結局のところレイテンシによって元々完全に同時にはならないので、まぁしょうがないかな、と。

冷静に考えると、この場合仮に東京リージョンがあっても微妙なタイムラグはあるわけだから、同じようにキューを使った処理を入れないといけないような気もしますが。。。

そうなるとこのエントリのタイトルが。。。。(--

いや、東京リージョンさえあればこんなブログを書く必要も無かったからやはりタイトルに偽りはありませぬ。(^^v

□□□□

このブログはHeroku Advent Calendar 2014の14日目の穴埋めでした。

明日は@shu_0115さんのHerokuの便利機能まとめ的な、です。

ちなみに冒頭のカットはハッカソンエントリ作品の一コマです。

明日には公開されるらしいですよ。(^^;;;

コメント

コメントを投稿

採用情報

株式会社フレクトでは、事業拡大のため、
Salesforce/Force.comのアプリケーション
開発
HerokuやAWSなどのクラウドプラッ
トフォーム上でのWebアプリケーション開発

エンジニア、マネージャーを募集中です。

未経験でも、これからクラウドをやってみた
い方、是非ご応募下さい。

フレクト採用ページへ

会社紹介

株式会社フレクトは、
認定コンサルタント
認定上級デベロッパー
認定デベロッパー
が在籍している、
セールスフォースパートナーです。
heroku partnersにも登録されています。
herokuパートナー
株式会社フレクトのSalesforce/Force.com
導入支援サービス
弊社の認定プロフェッショナルが支援致します。
・Visualforce/Apexによるアプリ開発
・Salesforceと連携するWebアプリ開発
も承っております。
セールスフォースご検討の際は、
お気軽にお問合せください。
Powered by Six Apart