A看了http://erlang.org/doc/apps/inets/http_client.html并找到了以下内容:
一个普通的异步请求。结果将发送到{http,{ReqestId,Result}}表单上的调用进程在这种情况下,调用进程是shell,因此我们收到结果。5 > {ok, RequestId} = http:request(get, {"http://www.erlang.org", []}, [], [{sync, false}]).
6 > receive {http, {RequestId, Result}} -> ok after 500 -> error end. ok
http:request以这种方式调用后向我传递了一条消息,但是它如何知道我的进程ID?据我所知,http:request必须做“Pid!{http,{RequestId,Result}”才能将结果发送给我,但是它在哪里知道Pid的价值?
答案 0 :(得分:6)
如果你看一下#request {}记录的定义(在httpc_internal.hrl中),你会看到有一个叫做from的字段。它包含来电者的pid;这就是服务器以后如何能够向呼叫者发送消息。
查看http模块的源代码,您将看到您的调用最终将到达handle_request函数,其中from字段设置为self()。
答案 1 :(得分:2)
你没有 - 如果需要回复,调用进程必须提供其Pid。做点什么
Server ! {self(), arguments}
然后元组的第一个元素是返回地址。