允許從一個進程讀取數據,而另一個進程寫入到Erlang的套接字中? 我試過了,它似乎工作,但我想知道它是否萬無一失。從兩個進程訪問套接字
回答
根據我對源代碼的理解,一個(gen_tcp,至少)socket send/recv歸結爲發送的erlang:port_command和套接字端口上的recv的erlang:port_control(請參見prim_inet。 ERL)。
對於port_command:「如果端口繁忙,調用進程將被暫停,直到端口不再忙。」 port_control也是一個同步操作。
糾正我,如果我錯了,但它似乎是完全安全的使用多個進程來讀取和寫入套接字。
雖然有一條評論,如果「擁有」過程死亡,那麼套接字將關閉。所以這兩個進程之間不是對稱的使用。 – 2010-09-06 11:16:40
我很確定我記得這樣做沒有任何問題。
他們中的任何一個都可以編寫,但如果您的所有進程都可以接收,則無意義。它會溢出所有不預期消息的郵箱。您只需要定義一個Pid來接收數據包,默認情況下它就是創建套接字的任何Pid。您可以通過設置控制進程來設置任何Pid來控制套接字。
如果使用{active,false}和recv()從套接字獲取數據會怎樣?雖然我不確定,但我希望幾個進程都可以調用recv(),這樣可以正常工作。 – 2010-09-06 20:57:00
這是真的。我很難想象在不同的進程調用recv的socket間傳遞。更好地使活動並有一個專門的循環接收{tcp,Sock,Data}。至少這是我習慣與他們合作的方式。 – 2010-09-09 02:16:14
- 1. 如何從另一個套接字訪問tcp套接字?
- 2. 使組播套接字可以從另一個線程訪問
- 3. 通過兩個網絡接口進行套接字編程simuntaneoulsy
- 4. 如何在NodeJS中訪問子進程的套接字?
- 5. 兩個進程共享UDP套接字,正在重新啓動
- 6. 從同一進程訪問兩個安全(Kerberos)Hadoop/HBase集羣
- 7. Python:停止套接字接收進程
- 8. 在一個線程中創建兩個套接字連接
- 9. Python通過套接字連接訪問遠程打印機
- 10. 從另一個進程訪問對象
- 11. 從功能內訪問全局套接字時遇到問題
- 12. 連接兩個客戶端套接字
- 13. 兩個模擬器問題之間的Eclipse套接字連接?
- 14. twisted.web.client.Agent的訪問套接字選項
- 15. 如何訪問VBA中的套接字?
- 16. 使用套接字訪問URL(w/cookies)?
- 17. Boost套接字Async_Connect訪問衝突
- 18. 順序訪問異步套接字
- 19. 在Android中的兩個進程之間存在一個打開的套接字
- 20. 創建兩個線程同時偵聽兩個套接字連接。
- 21. 套接字遠程連接問題C
- 22. 套接字編程。連接問題(...)api
- 23. 如何從另一個文件(多線程Java套接字編程)訪問名爲「numberPart」的字符串
- 24. 在進程之間傳輸套接字?
- 25. 使用J2ME進行套接字編程
- 26. PowerShell - 捕獲套接字和進程
- 27. HTML5從一個html頁面打開兩個網絡套接字
- 28. 響應沒有進入(android套接字編程/ tcp/ip套接字編程)
- 29. UDP在同一進程中的兩個套接字之間的組播
- 30. 兩個UNIX進程相同的TCP套接字上寫的同時
謝謝大家的回答。 Summa summarum:多個進程可以安全地寫入,但只有一個進程可以從套接字讀取。 – mihannus 2010-09-05 20:53:33