PostfixSMTPアクセスポリシーの委任として使用するrubyスクリプトを書いています。スクリプトはTokyoTyrantデータベースにアクセスする必要があります。私はEventMachineを使用してネットワーク接続を処理しています。EventMachineには、新しい接続が作成されるたびにEventMachineの処理ループによってインスタンス化されるEventMachine::Connectionクラスが必要です。したがって、接続ごとに、クラスがインスタンス化されて破棄されます。
EventMachine :: Connectionのpost_initから(つまり、接続がセットアップされた直後に)Tokyo Tyrantへの接続を作成し、接続が終了した後に切断します。
私の質問は、これがdbに接続する適切な方法であるかどうかです。つまり、必要なすべての時間に接続を確立し、終了後に切断しますか?(プログラムが開始されたときに)一度DBに接続すると、プログラムのシャットダウン中にDBを切断する方がよいのではないでしょうか。もしそうなら、どのようにコーディングすればよいですか?
私のコードは次のとおりです。
require 'rubygems'
require 'eventmachine'
require 'rufus/tokyo/tyrant'
class LineCounter < EM::Connection
ActionAllow = "action=dunno\n\n"
def post_init
puts "Received a new connection"
@tokyo = Rufus::Tokyo::Tyrant.new('server', 1978)
@data_received = ""
end
def receive_data data
@data_received << data
@data_received.lines do |line|
key = line.split('=')[0]
value = line.split('=')[1]
@reverse_client_name = value.strip() if key == 'reverse_client_name'
@client_address = value.strip() if key == 'client_address'
@tokyo[@client_address] = @reverse_client_name
end
puts @client_address, @reverse_client_name
send_data ActionAllow
end
def unbind
@tokyo.close
end
end
EventMachine::run {
host,port = "127.0.0.1", 9997
EventMachine::start_server host, port, LineCounter
puts "Now accepting connections on address #{host}, port #{port}..."
EventMachine::add_periodic_timer( 10 ) { $stderr.write "*" }
}
に関して、
ラージ