2009-08-15 84 views
3

一看了看http://erlang.org/doc/apps/inets/http_client.html,發現以下情況:如何在erlang中獲取調用進程的進程ID?

一個普通的異步請求。結果將以{http,{ReqestId,Result}}形式發送給調用進程。在這種情況下調用進程是shell,因此我們會收到結果。

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

HTTP:請求調用它的方式後傳遞消息給我,但它是如何知道我的進程id?據我瞭解,http:請求必須執行「Pid!{http,{RequestId,Result}」將結果發送給我,但它在哪裏知道Pid的值?

回答

6

如果您查看#request {}記錄(在httpc_internal.hrl中)的定義,您將看到有一個名爲from的字段。它包含來電者的pid;這就是服務器將能夠稍後向調用者發送消息的方式。

查看http模塊的源代碼,您將看到您的調用最終會到達handle_request函數,其中from字段設置爲self()。

2

你沒有 - 調用過程必須提供它的Pid,如果它想要回復。做類似

Server ! {self(), arguments} 

然後元組的第一個元素是返回地址。