Hi guys, i need help with this:
config.active_record.allow_concurrency = true
pid = Fork.begin(:detach => true) do
Fork.begin is a custom module, makes a fork with the properly mysql
connection and detach it …
while service.status # while status remains true… search for
incoming billing (MAIN LOOP)
messages = self.find(:first, :select => "count(id) as
messages_count", :conditions => “etc etc etc”)
if messages.messages_count.to_i > 0 # if nothing, search again for
self.connect_billing_socket(service, operator) # attempt to
to the billing socket
10.times do |i| Thread.new do while true break unless message = self.get_message(service, operator)
rescue false # get a message to make the bill
message.cobro_socket(service, operator) # send through
the message, phone number of remitent, and others info to make the
billing transaction with the operator
end sleep 5 service.reload
So… basically this is the most important part of the script.
I skipped many things to simplify this example.
The script connects to a socket to send a billing info, and
this socket can process up to 10 asynchronous request.
The problem is than each thread creates a new connection to
the database, with the time, the database crash
for have too many connections open, this happens when all
threads finish and the “MAIN LOOP” start over and
find more incoming billings, then “10.times do” makes 10
threads again and each thread creates a new database
How i can re-use open connections, or best, can
multiples threads share a single database connection??
I really not whant to close the old connections manually…