Padrinoアプリケーション内からウェブソケットを開いて使用する方法をお探しです。私はPadrinoが1つのスレッドで動作することを知っていますが、私は "onopen" "onclose" "onmessage"メソッドとPadrinoコントローラの間でWebSocketと変数を共有する方法を探しています。padrino && websockets
どうすればいいですか?私はに見えた
リンク:
Examples of Eventmachine usage with Padrino and Sinatra(のみシナトラが私のために働いていた) em-websocket on GitHub
UPDATE 1: これは私のmain.rbです:
require 'rubygems' # <-- Added this require
require 'em-websocket'
require 'padrino-core'
require 'thin'
require File.expand_path("../config/boot.rb", __FILE__)
SOCKETS = []
EventMachine.run do # <-- Changed EM to EventMachine
# class App < Sinatra::Base
# get '/' do
# SOCKETS.each {|s| s.send "fooooo"}
# return "foo"
# end
# end
EventMachine::WebSocket.start(:host => '0.0.0.0', :port => 8080) do |ws| # <-- Added |ws|
# Websocket code here
ws.onopen {
ws.send "connected!!!!"
SOCKETS << ws
}
ws.onmessage { |msg|
puts "got message #{msg}"
ws.send "ECHO: #{msg}"
}
ws.onclose {
ws.send "WebSocket closed"
SOCKETS.delete ws
}
end
# You could also use Rainbows! instead of Thin.
# Any EM based Rack handler should do.
#App.run!({:port => 3000}) # <-- Changed this line from Thin.start to App.run!
Thin::Server.start Padrino.application, '0.0.0.0', 3000
エンド
私はこの例外を受け取ります:
/home/cstore/.rvm/gems/[email protected]/gems/thin-1.2.11/lib/thin/daemonizing.rb:2:in `require': no such file to load -- daemons (LoadError)
from /home/cstore/.rvm/gems/[email protected]/gems/thin-1.2.11/lib/thin/daemonizing.rb:2:in `<top (required)>'
from /home/cstore/.rvm/gems/[email protected]/gems/thin-1.2.11/lib/thin/server.rb:50:in `<class:Server>'
from /home/cstore/.rvm/gems/[email protected]/gems/thin-1.2.11/lib/thin/server.rb:48:in `<module:Thin>'
from /home/cstore/.rvm/gems/[email protected]/gems/thin-1.2.11/lib/thin/server.rb:1:in `<top (required)>'
from main.rb:39:in `block in <main>'
from /home/cstore/.rvm/gems/[email protected]/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `call'
from /home/cstore/.rvm/gems/[email protected]/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run_machine'
from /home/cstore/.rvm/gems/[email protected]/gems/eventmachine-0.12.10/lib/eventmachine.rb:256:in `run'
from main.rb:9:in `<main>'
更新日2: Nathanに感謝! Gemfileに 'daemons'を追加してアプリケーションを再読み込みしました。
Gemfileに追加しようとします: 'gem 'daemons''通常、このエラーは、リストされたgemがGemsetにインストールされていないか、Gemfileにインストールされていないことを意味します。 – Nathan
参照のために、この例外を生成している行は単にデーモンライブラリをロードしようとしています:https://github.com/macournoyer/thin/blob/v1.2.1/lib/thin/daemonizing.rb#L2 – Nathan
私はそれを追加しました宝石。 did not work ....私はもう一度試してみると、うまくいきました。神は神秘的な方法で働いています:)感謝! – refaelos