Tôi đang làm việc với XMPP và tôi có một cuộc gọi lại tin nhắn được kích hoạt trong trường hợp mọi tin nhắn được gửi đi. Mục tiêu của tôi là gửi dữ liệu đến bằng tin nhắn đến một API trong cuộc gọi lại và dựa trên phản hồi gửi một cái gì đó trở lại bằng cách sử dụng máy khách XMPP.Các phương thức không đồng bộ gọi với Ruby giống như với Ajax
- Loại người dùng nhắn (Browser Trò chuyện Client)
- tin nhắn đến máy chủ thông qua XMPP
- tin nhắn được gửi đến API
- đáp ứng được nhận
- đáp ứng được gửi lại cho khách hàng trò chuyện .
Mã của tôi cho điều này là như sau
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
mối quan tâm của tôi ở đây là kể từ khi gọi lại là evented và yêu cầu đến API sẽ là một cuộc gọi chặn điều này có thể trở thành một nút cổ chai cho toàn bộ ứng dụng . Tôi muốn sử dụng một cái gì đó như AJAX cho Javascript sẽ kích hoạt yêu cầu và khi phản hồi có sẵn gửi dữ liệu. Làm thế nào tôi có thể thực hiện điều đó trong Ruby?
Tôi đã xem slow_job và backgroundrb trông giống như các công cụ cho hoạt động cháy và quên. Tôi sẽ cần một cái gì đó mà kích hoạt một cuộc gọi lại một cách không đồng bộ với phản ứng.
Tôi thực sự sẽ đánh giá cao một số trợ giúp về cách đạt được hành vi không đồng bộ mà tôi muốn. Tôi cũng quen thuộc với hàng đợi tin nhắn như RabbitMQ mà tôi cảm thấy sẽ bổ sung sự phức tạp đáng kể.
Tuyệt vời sẽ cho ảnh này. Có lẽ đây là nó. – Sid
Những gì tôi thấy là công trình này trong giao diện điều khiển nhưng không thêm nhiệm vụ vào hàng đợi khi chạy trong ứng dụng trong chế độ phát triển. BTW Tôi đang chạy hành khách và apache trong chế độ dev. – Sid