如何在erlang中获取调用进程的进程ID?

时间:2009-08-15 18:58:55

标签: erlang

A看了http://erlang.org/doc/apps/inets/http_client.html并找到了以下内容:

一个普通的异步请求。结果将发送到{http,{ReqestId,Result}}表单上的调用进程

      5 > {ok, RequestId} =
      http:request(get, {"http://www.erlang.org", []}, [], [{sync, false}]).
在这种情况下,调用进程是shell,因此我们收到结果。

      6 >  receive {http, {RequestId, Result}} -> ok after 500 -> error end.
      ok

http:request以这种方式调用后向我传递了一条消息,但是它如何知道我的进程ID?据我所知,http:request必须做“Pid!{http,{RequestId,Result}”才能将结果发送给我,但是它在哪里知道Pid的价值?

2 个答案:

答案 0 :(得分:6)

如果你看一下#request {}记录的定义(在httpc_internal.hrl中),你会看到有一个叫做from的字段。它包含来电者的pid;这就是服务器以后如何能够向呼叫者发送消息。

查看http模块的源代码,您将看到您的调用最终将到达handle_request函数,其中from字段设置为self()。

答案 1 :(得分:2)

你没有 - 如果需要回复,调用进程必须提供其Pid。做点什么

Server ! {self(), arguments}

然后元组的第一个元素是返回地址。