5月292013
0
インストール
% gem install em-rocketio-linda-client
pure EventMachine実装なので高速。
Lindaで音楽を再生するやつでplayしながらstopタプルを待ち受けるのに使っている。
インストール
% gem install em-rocketio-linda-client
em-websocketの接続数の上限が1015ぐらいなんだけど増やせた。forkとかは使わない。
環境はUbuntu12.04。
Macはepoll使えないので無理。
まずこちらを参考にファイルディスクリプタの上限を増やしておく。
ファイルディスクリプタの上限値を増やす – そ、そんなことないんだから!
で、EM::runの前にepollを使うようにしてset_descriptor_table_sizeを設定すればおk
require 'eventmachine'
require 'em-websocket'
EM.epoll
EM.set_descriptor_table_size 60000
EM::run
EM::WebSocket.run :host => "0.0.0.0", :port => 8080 do |ws|
## 略
end
end
Webアプリと同じプロセスにworker入れてお金が節約できる。
Webアプリは “リクエスト来る→サーバーで処理→レスポンス返す” というのを繰り返すわけだが、サーバーでの処理に時間がかかる場合にそこを別のプロセスに任せて、先にレスポンスを返しておいて、あとで結果は取りに来てよ、という実装をする事がある。
時間がかかる処理は2つに大別できる。
post '/regist_user' doこれだとメールが送信されるまでレスポンスを返せないので、ブラウザが固まる。
mail_addr = params[:mail]
send_mail(mail_addr, 'hello!!') ## メール送信する処理
redirect '/' ## トップページに戻す
end
post '/regist_user' do
mail_addr = params[:mail]
EM::defer do
send_mail(mail_addr, 'hello!!') ## メール送信する処理
end
redirect '/' ## すぐレスポンス返す
end
require 'sinatra'
require 'eventmachine'
## (略)
run Sinatra::Application
EM::defer do
loop do
sleep 5
next if @@jobs.empty?
job = @@jobs.shift ## ジョブ1つ取り出す
## job処理する
end
end
post '/add_job' doキューにはDBとかgearmanとか使ったほうが良いと思う。
@@jobs.push '仕事'
end
半年ぐらい前に作って、書くのを完全に忘れてた。
Skype Botの類が簡単に作れるようになるし、スマホの重いSkypeクライアント起動しなくてもチャット読めたりしてなかなか便利です。skype-socket-gatewayは捨てましょう。
Mac版とLinux版がある。Mac版はchatの読み書きができるけど、Linux版はAPIがよくわからなくて書き込みしかできない。
自分のプログラム <--(HTTP)--> Skype-Gateway <--(AppleScript)--> Skype.appという感じで通信する。
curl -d 'hello!!' http://localhost:8787これでchatにhello!!と投稿される。
phidgets-servo-serverというのを作った。
上のリンク先のgithubにphidgets関連のライブラリのインストール方法は書いてある。準備すると、
phidgets-servo-server --port 8901でサーバーが起動する。
% curl http://localhost:8901HTTP-POSTで指定角度に回転する。
% curl -d '90' http://localhost:8901