Как обрабатывать запросы ruby ​​постов асинхронно с помощью Eventmachine - PullRequest
0 голосов
/ 01 сентября 2011

В ходе запроса в приложении rails я хотел бы опубликовать данные на другом сервере и завершить исходный запрос, не дожидаясь разрешения внешнего сообщения.У меня есть следующий код, который публикует должным образом, но все еще ждет завершения сообщения, прежде чем двигаться дальше.Я пытался переместить EventMachine.stop за пределы callback, но на этом все заканчивается, вызывая errback.Что мне делать?

EventMachine.run {
    http = EventMachine::HttpRequest.new(url).post :body => {body}
    http.errback { p 'Uh oh'; EM.stop }
    http.callback {
      p http.response
      EventMachine.stop
    }
  }

РЕДАКТИРОВАТЬ: Я не женат на eventmachine для этого.Если есть лучшее решение, я весь слух.

1 Ответ

0 голосов
/ 03 сентября 2011

Существует простое решение, которое заключается в том, чтобы просто создать новый поток и позволить ему выполнить работу, одна библиотека, которая может (или не может) помочь вам сделать это правильно, - https://github.com/tra/spawn. Я никогда не использовал его сам, но я думаю, что он подойдет для ваших нужд.

Я люблю Eventmachine и использую его в большинстве своих проектов (рабочих или личных), но для того, чтобы он работал с рельсами, требуется больше работы, и вам все равно нужно быть очень осторожным с тем, какие библиотеки вы используете и как не блокировать реактор.

Обратите внимание, что вы также должны быть осторожны с шагами, если делаете что-либо блокирующее, но большинство современных библиотек построено так, чтобы не блокировать интерпретатор (по крайней мере, в 1.9)

...