職業プログラマの休日出勤スマートフォン用の表示で見るスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。職業プログラマによる日曜自宅プログラミングや思考実験の成果たち。リアル休日出勤が発生すると更新が滞りがちになる。記事の内容は個人の意見であり、所属している(いた)組織の意見ではない。2014-03-16AWSのS3を使った疑似push型配信AWSパソコン・インターネットJavaScriptApacheとその周辺Webページ内でpush型配信をやろうと思ったとき、どのように実現しますか?WebSocketCometAjaxで定期的にpolling(ポーリング)ここ数年ではWebSocketを使う事例が多いかとは思いますが、やっぱり、色々と面倒臭いというのが正直なところです。言って、Comet的な手法を使うのもTCPコネクションの累積のことを考えると、ユーザ数が増えてきたらサーバをどんどん増やしていかなければなりません。最後のAjaxで定期的にpollingする方法も似たようなもんです。使うんだったら、TCPコネクションの累積や大量のHTTP(S)リクエストでもビクともしない(とは言っても限度はあるでしょうけど)、S3を活用してみることにしましょう。警告ブログ全般に言えることですが、改めて明記しておきます。※警告1:この記事の内容を参考にした結果何らかの損害が発生したとしても、当方では一切責任を負いません。十分に検証した上で利用して下さい。下の方にあるサンプルコードについても同様です。※警告2:誤った設計やコード、設定などはS3に過剰な負荷をかけたり、高額の利用料を請求されるなどの可能性も考えられます。十分に気を付けて下さい。本当ならシーケンス図を書くべきところかもしれませんが、文字だけで頑張ります。S3内のどこかのバケットに、jsonファイルを置いておくWebブラウザが、EC2インスタンスからページ本体をロードしてくる何かをきっかけにして、(1)で準備したjsonファイルのURLへのpollingを開始する。勘のいい方は既にお気付きだと思いますが、pollingのためのAjaxは(普通は)cross-domainになってしまいます。設定をしなければなりません。設定をするには、これらの記事を参考に。Configuration」を使って設定を変更すれば良い、ということになります。設定はXMLで記述することになりますが、上記のドキュメントがあれば楽勝でしょう。レイテンシどれくらいのレイテンシ(遅延)があるのか、計測してみました。※検証には東京リージョンを用いました。※上記RTTのうち大部分はTCPコネクションを張る動作と、SSL関連であると思われます。Requestを投げてから約500ms後にS3上のファイルが書き変わるように仕込んだところ、書き換え後の値を取得することに成功しているケースがありましたので。JavaScript)※jQueryが必要です。※乱数(実態はPHPのuniqid())を生成して、JSONに詰め込んでS3に置きます。$e-&gt;getMessage();}まとめ:この方法はこんな環境に適しているはず大量のユーザ宛に同一のコンテンツを配信したいとき1秒や2秒程度のレイテンシは気にならないときEC2インスタンスを無駄に増やしたくないとき考えられる応用事例:大量のユーザ宛に同一の情報を配信する訳ではない場合S3内に置くファイルの命名規則あたりをしっかり設計すれば、きっと上手く行くでしょう(未検証)。ないのか?CloudFrontに対するS3の優位性は、金銭的コストです。3KB程度)という特性があります。S3はCloudFrontに比べると、GETリクエスト単価は半額くらい、転送データ量に基づく料金はほぼ同じという設定になっていますので、やっぱりS3の方が安いです。使えますので、polling動作のレイテンシを下げることができる可能性はあります。暇があったらぜひ実験してみたいところです。見るAWSを初めて触る前に、この2つの本のうち片方を読んで勉強しました。どっちだったかは忘れましたwたぶん前者ですが自信が無い。サーバ構築/管理の経験がそれなりにある人であれば、AWS初めてでもスラスラ読める内容になっていると思います。著者id:t_motooka職業プログラマ。本業は京阪地区でのWebアプリの開発運営。AWS2016-12-312016年、作ったものまとめ。Blog|ブログを報告する。