の下で、私は別のキューにいくつかのメッセージを公開している、シンプルなシンサーバーを実行している、コードは次のようになります。今、私は、サーバーを実行して、http://0.0.0.0:4001/command=r&number=123123123ような何かを行うときルビーAMQPシンHTTPサーバ
require "rubygems"
require "thin"
require "amqp"
require 'msgpack'
app = Proc.new do |env|
params = Rack::Request.new(env).params
command = params['command'].strip rescue "no command"
number = params['number'].strip rescue "no number"
p command
p number
AMQP.start do
if command =~ /\A(create|c|r|register)\z/i
MQ.queue("create").publish(number)
elsif m = (/\A(Answer|a)\s?(\d+|\d+-\d+)\z/i.match(command))
MQ.queue("answers").publish({:number => number,:answer => "answer" }.to_msgpack)
end
end
[200, {'Content-Type' => "text/plain"} , command ]
end
Rack::Handler::Thin.run(app, :Port => 4001)
私はいつも、何かの重複出力を取得しています:
「コマンドなし」 「いいえ番号」 「コマンドなし」 「いいえ番号」
最初に目をなぜ私は二重の要求のようになっているのですか?ブラウザと何か関係がありますか?私がカールを使用するとき、私は同じ振る舞いをしていないので、なぜ私はパラメータを得ることができないのですか?そのようなサーバの最適な実装について
任意のヒントは非常に事前に
おかげでいただければ幸いです。
迅速な対応をありがとうございます。あなたは正しいようですが、この行動を排除する方法はありますか? AMQPを使ったThinの使用例があります。これは、p envの出力と同様に最適な最適化方法です。https://gist.github.com/78208470bfffbef400fe – eki
異なるWebサーバー上でWebアプリケーションを実行するための抽象レイヤー/ミドルウェアであり、「thin」はラックアプリケーションを実行する実際のWebサーバーです。あなたは "ラックamqp"のためにグーグルグーグルで成功するかもしれません。また、Bunnyのような上位レベルのAMQP宝石の1つ、https://github.com/ruby-amqp/bunnyをご覧ください。希望が役立ちます。 – Matt