一般論として、全二重の通信プロトコルを実装するにあたっては、いくつか注意すべき点があって、具体的には、到達確認と切断シーケンスについて定めておかないと、送達されたはずのメッセージがロストしていたり、切断タイミングによってエラーが発生*1したりする。 具体例をあげると、たとえばTCP/IPにおいてshutdown(2)を用いずに、いきなりclose(2)を呼んでいると、read(2)やwrite(2)がエラー(ECONNRESET)を返す場合がある。 翻って、WebSocket (RFC6455)の場合はどうなってるか? だいたい以下のような感じっぽい。 ws.close()が呼び出されるとWebSocketをCLOSING状態に変更し、Closeフレームを送信する ws.onmessageはWebCosketがCLOSING状態にある間も呼ばれるかもしれない*2 相手からCloseフレーム
ログの見れないSkypeやっぱ不便だよね→Hubotとかあるし自分でチャット作ったら面白そう→そういやLINEってSPDYなんだっけ→WebSocketってSPDYに乗るんじゃなかったっけ。 というわけでSPDYとWebSocketのServer Pushについてざっくりと調べてみた。 SPDY と WebSocket の基礎と SPDY の Pushとか、WEB+DB PRESS Vol.75のSPDYの特集の第1章を読んだ感じ、 SPDYでは、後々リクエストが来るとわかっているリソースをサーバから送りつけてキャッシュさせておく それによってリクエストの生成と通信のコストを削減できる レスポンスを並列で返せるようになったのでさらに時間を短縮できる WebSocketでは、純粋に相互にメッセージのやりとりをする やり取りするモノが最初に決まるので毎回送受信するヘッダを削減できる まさに相互
Currently there aren’t many options when it comes to proxying WebSockets. Nginx doesn’t yet fully support WebSockets out of the box, though some people have opted to take an older version and patch it. I wont go into why I eventually decided to go with HAProxy, but I will link you to an article which does a nice job of summarizing the current state of Proxies and WebSockets. Thankfully, there’s HA
こんばんは。社内ニートの佐野と申します。所属はいちおAmebaのインフラチームです。Twitterもやっていますがフォローする価値はないです。つぶやいているのはメシと酒の話と下ネタだけです。 最近、組織改編とかもろもろありましてこのたびは雑用からニートになりました:(;゙゚'ω゚'): あまり目立たないように生きてたんですが、何気にこのブログへの登場は3回目になります...。前回は2012年12月に「QCon San Francisco 2012の参加レポ」を書かせていただきました。その前は2012年5月に「Virident FlashMAXの検証」として名前だけ登場しました。なんか、ニートだけど会社に貢献してる気がしてきた(^ρ^) そんなわけで以前WebSocketを使った監視ツールもどきを作ったので、それについての簡単な説明と、各種技術要素(Python, Jolokia)のTips
オープンソースのWebサーバー「nginx」開発チームは4月24日、最新の安定版となる「nginx 1.4.0」を公開した。1年ぶりの新たな安定版リリースとなり、SPDYプロトコルのサポート、WebSocketリバースプロキシなどの機能が加わっている。 nginxはロシアの開発者Igor Sysoev氏が開発したWebサーバーソフトウェア。軽量かつ高速なのが特徴で、リバースプロキシやIMAP/POP3プロキシ、キャッシュ、負荷分散、コンテンツの圧縮といった機能も持つ。ライセンスは二条項BSDライセンスで、BSD系OSだけでなくLinuxやMac OS X、Solaris、Windowsなどさまざまなプラットフォームで動作する。調査会社Netcraftの調査によると2013年4月のシェアは15%で、Apache HTTP Server(55%)、Microsoft IIS(20%)についで3
Node におけるスケールアーキテクチャ考察(Scale 編)というエントリーを読んで、RedisはPub/Sub型通信をサポートしているという事を知りました。エントリーでも言及されているように、Pub/Subを使えば Node.js + WebSocket サーバをスケールする際に、中継サーバの役割を果たす事が出来るはずです。 そんな訳で実際に Node.js と Redis を使って Pub/Sub の実験を行なってみました。ユーザが別々のNode.jsサーバに接続していてもWebSocketを通してメッセージのやり取りを出来るようにします。 イメージとしてはこんな感じです。 下準備# Ubuntuの場合は apt-get で1発でインストールする事が出来ます。 $ sudo apt-get install redis npmでredisモジュールをインストールします。 $ npm i
http://keima.herokuapp.com/ 「えーpolling!? pollingが許されるのは小学生までだよねー、キャハハハ」というわけでpush通知にWebSocketをお使いのみなさま、こんにちは。 しかし、毎回、WebSocketを扱う機能を実装するのは、いくつかの理由で面倒ですよね! WebSocketは様々なバージョンがあるので、すべてに対応するのは面倒。 同様の理由で、個別のアプリで作り込んでしまうと、WebSocketのバージョンアップに追従するのが面倒。 WebSocketは大抵別サーバになっているので、設定が面倒。 Heroku等のPaaSではWebSocketを使えないことが多い。 (2015/1/23追記: HerokuはWebSocketをサポートするようになりました) そこで、WebSocketによるpush通知に特化したWebサービス Keima
分割が可能な重い処理をサーバー側で実行して、処理の状況の変化をクライアント側で表示させたいとき(プログレスバーみたいなのを作るとき)、どういう方法がいいかちょっと考えてみた。問題は「どうやって処理の進歩状況の情報をクライアントサイドでリアルタイムに受け取るか」ということ。 まず最初に浮かぶのが、分割されたタスクを1つ行うAPIをサーバー側で用意して、クライアント側からJSのsetTimeoutなりライブラリのdeferredなり使って並行リクエストして、コールバックでプログレスバーを書き換える・・・みたいなのが浮かんだ。けれど、PerlにはCoroやAE::HTTPみたいな便利なものがあるし、「折角なので並行処理の制御はあくまでサーバー側でできないか?」と考えていた。 で、次に思い付いたのが、「分割されたタスクが1つ終わるたびにサーバー側からクライアント側に情報をpushする」こと。これを
WebSocketって何? WebSocketは、Javascriptでサーバとリアルタイム双方向通信をする仕組みです。概要は第1回 WebSocket登場までの歴史:Jettyで始めるWebSocket超入門|gihyo.jp … 技術評論社によくまとまっています。 この記事ではWebSocketサーバを実装しながら、どういうプロトコルかを解説します。サンプルコードはWebSocket Draft 76でechoサーバーを作ってみた - いろいろな何かのものを参考にさせていただいています。ありがとうございます。 ※WebSocketプロトコルは現在ドラフトの段階なので、そのうち仕様が変わる可能性があります。この記事は20111/23時点の情報です。 プロトコル概要 WebSocketで通信を行なうおおまかな流れは次のようになります。 クライアントとサーバの間でハンドシェイクを行ない、接続
jQueryのSortableとem-websocketを組み合わせ、同じページをブラウザで閲覧中のユーザが、共同してリストの順番などを変更できないかRuby on Railsで試してみました。 また誰かが操作中は、警告アイコンを表示するようにしました。 ソース http://github.com/nkmrshn/share_sortable 用意 Gemfileにem-websocketを追加し、「bundle install」でインストールします。 gem 'em-websocket' gem 'jquery-rails'また、今回はprototype.jsではなくjQueryなので、jquery-railsも追加し、アプリの作成は「rails new APP_NAME -J」とprototype.jsを作らず、インストール後に rails generate jquery:instal
top » blog » 2011-06-23-RailsでWebSocketを手軽に使う.md RailsでWebSocketを手軽に使う Pusher 無料で利用できるWebSocket配信専用サーバ。 Rails製のtwitterクローンに組み込んで、つぶやかれた時にWebSockeでPushされるようにする。 http://pusher.com/ 今回の場合だと、具体的にはこんな感じ。 ブラウザでつぶやく Railsでつぶやきを保存 RailsでつぶやきをHTML化してPusherにPost ブラウザにPusherからHTMLが飛んできて自動更新 デモ 誤って録画中マイクONになっていたので、HHKBの風情ある動画に仕上がりました。 今回使用したtwitterクローン"mio"のコードはこちら。 http://github.com/r7kamura/mio mioの詳しい開発
ずっと、待ち焦がれていたAPIが、ついにテスト実装されました。ブラウザから、カメラのライブストリームを取得するStream API (仕様はWHAT WGのサイトに記載)です。 この機能により、Webアプリのポテンシャルが飛躍的に向上すると期待されます。例えば、ビデオチャット。 カメラから取得した映像データを、Websocket で相互に交換すれば、ブラウザのネイティブ機能だけで、簡単に実現できます。 この機能が、実装されたのは、Opera mobileのテクニカルプレビュー(for Android)。以下のサイトの[Android build]からインストール出来ます。 http://my.opera.com/core/blog/2011/03/23/webcam-orientation-preview また、詳しくは以下のブログ(WebOS Goodies)で紹介されています。是非、ご
WebSocket API(日本語訳)は、全二重の双方向通信を可能にするAPIで、これによりリアルタイムなWebアプリケーションを実現することができるようになります。WebSocketのプロトコル側の仕様が半年ほど前にRFCとして策定され、ようやく落ちついたところです。(まだ仕様変更がある可能性がないとは言い切れないけど) ※なお、ブラウザーは現時点(2012/07/26)での各最新のブラウザーを対象とします。(Chrome20,Firefox14,Opera12,Safari5+Safari6) また、ブラウザーに実装されているWebSocket(API)のことを"WebSocketクライアント"と呼ぶことにします。 WebSocketクライアントが実装されているブラウザー 主要なブラウザーのうち現在においてWebSocketクライアントを実装しているのはChrome,Firefox,O
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く