まさかの日記

最近まともな文章しか書けなくなってきました

2010/12


http://d.hatena.ne.jp/mirakui/20100502/1272849327


の通りですが、この手順をやらないといけなかったのでメモ。


RUBY - RVM doesn't work for 1.9.1 but works for 1.8.6 and 1.8.7 - efreedom http://efreedom.com/Question/1-2910507/RVM-Work-191-Works-186-187


readlineを入れなおしたり、
エラーになるdylibファイルを消したりとか、このへんとか

rvm install 1.9.1 -C --with-readline-dir=$HOME/.rvm/usr


出てたエラーはこのへん


ld: in /usr/local/lib/libsqlite3.dylib, file was built for i386 which is not the architecture being linked (x86_64)


これも出てた。

readline.c: In function ‘username_completion_proc_call’:




efreedomってサイトは最近よく出てくるけど自動翻訳で却って分かりにくい。
URL先頭のja.を外すとオリジナルの英語表示に戻ります。


謎アプリをエンドユーザに近いところに軽く見せたところ、やっぱリアルタイムチャットを必要としているということではないらしい。

まあ予想の範囲内ですが。



ポートの話もあるし、個別アプリにしちゃうとアップデート地獄に堕ちるので、ここはリアルタイム系はすっぱり諦めてperiodicalにexecuteすることにする。

ユーザ数1000人くらいまでなら大丈夫かと。
読み出し処理メインなので負荷分散もしやすいし(杞憂




以下メモ。

・GAEでPusherを使わずにComet出来るようになったらしい。Channel APIってのを使うらしい。

GAEのChannel APIでリアルタイムWebアプリ - ニノ日記
http://d.hatena.ne.jp/ninoseki/20101205/1291519323

#appengine でComet! Channel APIでpushできるぞ - スティルハウスの書庫
http://d.hatena.ne.jp/kazunori_279/20100528/1275039829

・あんまり関係ないけど。

[ruby][sinatra] Sinatraのハンドラ内でem-http-requestを使う - daily gimite
http://d.hatena.ne.jp/Gimite/20101017/1287298216


こういう話ってのが地味に大事だと思うんだけどその大事さを継承できていないなあという気がする昨今ですが、まあそれはそれでよかろうと。


・というわけで当面はAjaxベースで充分かと。せっかくなのでJQueryベースに移行したいところ。

無題メモランダム: Ruby on Rails + jQuery + Ajax で動的にページの一部を更新する
http://blog.mudaimemo.com/2008/08/ruby-on-raisl-jquery-ajax.html

dequeue() - jQuery 日本語リファレンス
http://semooh.jp/jquery/api/effects/dequeue/_/



・とか言いつつ、当面Websocket関連はwatchするつもり。

9、10、11月の成果と12月の目標 - makotoiの日記:from London
http://d.hatena.ne.jp/makotoi/20101129

WebSocketで目指せ“リアルタイムWeb”! - @IT
http://www.atmarkit.co.jp/fcoding/articles/websocket/01/websocket01a.html

em-websocket でチャットとか|Sweets Programming Memo
http://ameblo.jp/i18n/entry-10545104040.html


を作ろうとしていたりしていて、アプリ部分(railsとか)とリアルタイム処理部分(cometベース、もしくはwebsocket)との振り分けをなんとかできないか。

つまり80番ポート1つですべて動かす、ってことができないかを調べてたのでその現時点での自分用メモ。



ていうか、ポート2つ使うものであればshooting_starベースで一応ひと通り動く状態にはなってるんだけど、ポート2つ使っちゃってるから、SSL化できないというのが今の課題。



できるだけ有りモノですまそうとした場合、方法としては2つ。


■nginx用のプラグインで振り分ける
 ⇒リアルタイム処理の部分が独自実装になっていて?悩ましい。
  これからはやっぱwebsocketだろ、という気もしつつ。


■haproxyで、websocketのリクエストを振り分ける
 ⇒これが出来ればこっちで行くんだが、とりあえず動かない。。。
  こっちが本命かなという気もしつつ、websocketの仕様がまだまだ固まらないという話を聞くと実戦投入はまだ先かなとか。。
  そういう意味ではcometはある意味枯れてるよねという話も。




でよくよく考えると、

・URLベースでnginxとかでリバースプロキシすれば1ポートで出来るんじゃないの?
 ⇒これはすんなりとは行かないと思われる。
  例のshooting_starベースだと、チャットでの発言を受けてlong_poll中のセッションにレスポンスを返す部分が一つのコントローラになっていて、これを分離するのが面倒。

・1つのポートですべて完結させたいっていうののそもそもの目的はHTTPSベースにしたい、ってことなんだけどそれって出来るの?
 ⇒websocketにはsslは実装されてるっぽい。。
  cometベースでのlong poll がsslでも大丈夫なのか、ちょっと怪しい気が。keepaliveみたいなこともできなかった気が。(それを解決するのがwebsocketのssl通信ということかと)


というわけで、結局lingrと同様にeventmachineベースで半分自作みたいなcometサーバを作って、リバースプロキシで内部振り分け、っていうのが一番現実的かも。つかもう何年も前にそれできちゃってるlingrはすごすぎる。



まああとリアルタイムチャットにどこまでこだわるか、ってのはあるんだけど。エンタープライズ用途だったらperiodicalExecuteとかで充分な気も。



<参考URL>


Emerge Technology: WebSocketでChatを作ってみた http://blog.liris.org/2009/12/websocketchat.html

go言語によるwebsocketチャットの実装。
以下もそれ系。
簡単なものはすぐできるけど、認証の仕組みとか複数のチャット部屋に分けたりするのはどうしたらいいのか全くわからん。。。。


websocketで遊んでみた - IT素人がIT機器を弄ったり妄想したりする日記 http://d.hatena.ne.jp/the48/20100627/1277646213

WebSocketとWebWorkerを使ってみました - html5-developers-jp | Google グループ https://groups.google.com/group/html5-developers-jp/browse_thread/thread/e82f0d3d0353cfb0?hl=ja
EventMachineとWebSocketでリアルタイムwebアプリを作る: Kwappa開発室 http://kwappa.txt-nifty.com/blog/2010/11/eventmachineweb.html


eventmachineベースのruby用のいろんなgem。em-websocketとem-websocket-serverは違いがよくわからん。。とりあえずem-websocketベースのものが手元では動いている。

igrigorik's em-websocket at master - GitHub https://github.com/igrigorik/em-websocket https://github.com/igrigorik/em-websocket.git

dansimpson's em-websocket-server at master - GitHub https://github.com/dansimpson/em-websocket-server


これは単にProxy。リバースプロキシっぽい使い方が出来るものかと思って期待したんだけど違ったっぽい。
mcolyer's em-websocket-proxy at master - GitHub https://github.com/mcolyer/em-websocket-proxy



Stompってのがあるっぽい。詳細不明。
Matt Colyer » WebSockets & Stomp, the Real Realtime Web http://matt.colyer.name/2010/07/18/websockets-stomp-the-real-realtime-web/


Crampってやつとか。

has_many :bugs, :through => :rails http://m.onkey.org/websockets-made-easy-with-cramp

akitaonrails's cramp_chat_demo at master - GitHub https://github.com/akitaonrails/cramp_chat_demo


この人の記事はひと通り読む価値あり。

Ruby & WebSockets: TCP for the Browser - igvita.com http://www.igvita.com/2009/12/22/ruby-websockets-tcp-for-the-browser/


Ruby & WebSockets: TCP for the Browser | Rails Fire http://www.railsfire.com/article/ruby-websockets-tcp-browser

Nginx & Comet: Low Latency Server Push - igvita.com http://www.igvita.com/2009/10/21/nginx-comet-low-latency-server-push/ em-http




後半がよくわからん。。勉強になりそうな予感。

Websockets and Ruby EventMachine http://www.slideshare.net/ismasan/websockets-and-ruby-eventmachine


これを読んでhaproxyをひと通り調べた

RUBY ON RAILS - Can nginx be used as a reverse proxy for a backend websocket server? - efreedom http://efreedom.com/Question/1-2419346/Can-Nginx-Used-Reverse-Proxy-Backend-Websocket-Server

http://haproxy.1wt.eu/#docs

Re: HAProxy is incompatible with WebSocket protocol revision 76? http://www.mail-archive.com/haproxy@formilux.org/msg03047.html


その他

WebSocket | どうも。わたすがダニーです。 http://daniels-lab.jugem.jp/?cid=5


ポートの話とか。
WebSocketsの実験(未完) - Note ON http://veritas-vos-liberabit.com/note_on/2010/06/websockets.html



後半でなぜかJavaアプリのアプリ化みたいな話がやたら詳しく書いてあったり。

Jettyで始めるWebSocket超入門:第6回 アプリケーションの作成と配布物の生成|gihyo.jp … 技術評論社 http://gihyo.jp/dev/feature/01/websocket/0006



twitterのストリーミングAPIをいじる系

lib/tss_em_web_socket_server.rb at master from gimite's tweet-search-stream - GitHub https://github.com/gimite/tweet-search-stream/blob/master/lib/tss_em_web_socket_server.rb

[tss][ruby] Tweet Search Streamの実装をem-websocketとem-http-requestに - daily gimite http://d.hatena.ne.jp/Gimite/20101011/1286764612


ruby1.9.1での何かのサンプル

Using the em-http gem with WebSockets - SWiK http://swik.net/Ruby/Code+Snippets%3A+ruby/Using+the+em-http+gem+with+WebSockets/ecyzt







このページのトップヘ