Я хочу сделать асинхронный запрос на отправку httpc, используя {приемник, приемник} и {sync, false} .Receiver может быть pid(), но я хочу использовать его как функцию с 1 аргументом, который получает идентификатор, из которого я могу извлечь pid(). Я не могу использовать pid() здесь, потому что pid() может измениться, если процесс перезапускается, но id остается таким же. Если кто-нибудь может дать мне пример того, как использовать приемник как функцию. это было бы большой помощью.Erlang asynchronous httpc post request
ответ
В Erlang вы можете зарегистрировать процесс под каким-либо именем с помощью register/2
. Например, вы можете назвать это, когда вы начинаете процесс обработчика:
register(post_handler, self()).
Таким образом, вы можете использовать новое имя с !
оператора:
post_handler ! message.
Таким образом, вы можете использовать функцию в качестве приемника таким образом:
Receiver = fun(ReplyInfo) -> post_handler ! ReplyInfo end.
request(post, Request, HTTPOptions, [{receiver, Receiver} | OtherOptions], Profile).
Я думаю, что, когда вы звоните httpc: Запрос/4, вы знаете, Id вы хотите использовать, а функция для получения соответствующего PID, поэтому вам просто нужно создать анонимную FUNC Тион непосредственно перед вызовом httpc: запросить/4:
IdRequest = createIdRequest(Request),
ReceiverFunc = fun(ReplyInfo) -> getPid(IdRequest) ! {http,ReplyInfo} end,
httpc:request(Method, Request, HTTPOptions,[{sync, false},{receiver,ReceiverFunc}|Opts]).
Если вы боитесь, что процесс приема умер и был перезапущен (с новым ИДП), обратите внимание, что при этом (или с помощью зарегистрированных процессов) будет по-прежнему позволяют некоторое время окно был ли процесс приема не существует (или еще не зарегистрирован). Функция getPid должна иметь дело с этим, и в любом случае отправленное сообщение может быть потеряно (pid dead) или создать сбой (процесс еще не зарегистрирован).
На мой взгляд, вы ищете возможность восстановления после ошибки на слишком низком уровне, создавая бесполезную сложность.
- 1. как http: отправить файл с httpc: request в erlang?
- 2. Невозможно использовать модуль httpc в своем eunit test erlang.! `
- 3. asynchronous xml request не возвращает
- 4. Asynchronous json request Objective C
- 5. Настройка заголовков в запросе HTTPC записи в Erlang
- 6. ElasticSearch asynchronous post
- 7. tornado asynchronous post multipart
- 8. Erlang inets httpc connect to local inets httpd
- 9. Erlang bittorrent pieces request
- 10. C# Asynchronous WebRequest с POST
- 11. Redux Asynchronous Request Issue (Thunk Middleware)
- 12. Сделать запрос Asynchronous GET/POST в Swift
- 13. AngularJS - Request Body Request POST
- 14. HTTPc get request не работает с 404, когда включены заголовки auth
- 15. REST API Post request - Request Error
- 16. Php торт post request
- 17. POST Request Retrofit 2.0
- 18. Rest Api Post request
- 19. POST Request дважды
- 20. Android Multipart POST Request
- 21. PHP post request
- 22. Capybara post request issue
- 23. C# API POST Request
- 24. ajax post request url
- 25. Request Post CI
- 26. RESTKit POST Request Tutorial
- 27. POST Request UWP
- 28. Http post request-body
- 29. HttpUrlConnection post request issue
- 30. slow post request RoR