Sto lavorando con XMPP e ho un messaggio di richiamata che viene attivato sull'evento di ogni messaggio inviato. Il mio obiettivo è inviare i dati che arrivano dal messaggio a un'API all'interno del callback e in base alla risposta inviare qualcosa utilizzando il client XMPP.Chiamate di metodi asincroni con Ruby come con Ajax
- Tipo di utente messaggio (Browser client di chat)
- messaggio arriva al server tramite XMPP
- messaggio viene inviato alla API
- di risposta ricevuto
- risposta viene inviata indietro al client di chat .
Il mio codice per questo è la seguente
admin_muc_client.activate_message_callbacks do |m|
sender = m.from.resource
room_slug = m.from.node
message = m.body
r = HTTParty.get('http://example.com/api/v1/query?msg=message')
Rails.logger.debug(r.inspect)
admin_muc_client.send_message("Message #{r.body}") if m.from.resource != 'admin'
end
La mia preoccupazione è che dal momento che il callback è evented e la richiesta alle API sarebbe una chiamata di blocco Questo potrebbe diventare un collo di bottiglia per l'intera applicazione . Preferirei usare qualcosa come AJAX per Javascript che genererebbe la richiesta e quando la risposta è disponibile invia i dati. Come potrei implementarlo in Ruby?
Ho visto delayed_job e backgroundrb che sembrano strumenti per il fuoco e dimenticano le operazioni. Avrei bisogno di qualcosa che attivi una richiamata in modo asincrono con la risposta.
Apprezzerei molto l'aiuto su come ottenere il comportamento asincrono che voglio. Ho anche familiarità con le code di messaggi come RabbitMQ, che ritengo sarebbero un'aggiunta di notevole complessità.
Impressionante darà uno scatto. Forse è questo. – Sid
Ciò che trovo è che funziona nella console ma non aggiunge l'attività alla coda quando viene eseguita nell'applicazione in modalità di sviluppo. A proposito, sto guidando passeggeri e apache in modalità dev. – Sid