梳理了下需求,大體如下:
進程(Process)。進程是Erlang中一個虛擬的運行單位。既不是操作系統的進程,也不 是線程,而是比線程更加輕量的單位,更接近於協程。
命名進程(NamedProcess)。命名進程的好處是,你可以向一個不知道進程ID的進程發送 消息。由於進程可能會宕掉(crash),進程ID可能會發生變化,所以在考慮了異常的環境下 ,命名進程降低了編碼的難度(你不再需要考慮進程crash檢測和重建連接的過程)。
進程郵箱(Mailbox)。每個進程都擁有一個自己的郵箱,其他進程發送消息到該郵箱, 而進程在合適的時機從中取出消息並處理之。
定時器(Timer)。這個是屬於最最基礎的模塊,用於多種用途,如超時檢測等。
消息編碼/解碼(encode/decode)。將進程的請求(sync/async的函數調用)encode為網 絡消息流,或將網絡消息流decode回進程的請求。
消息發送/接收(send/receive)。發送(send)指將消息(Message)發送到目標進程( Process)的進程郵箱(Mailbox)中。接收(receive)則從進程郵箱(Mailbox)取出消息 (Message)。接收可以有選擇性接收(selective receive),即按一定的匹配模式選擇要 接收的消息。
進程鏈接與監控(link/monitor)。當兩個進程鏈接時,一個掛掉後會通知另一個進程。
速錯(fail fast)。這關乎資源管理(Resource Management)與異常處理(Exception Handling)。Erlang的哲學是發生不可恢復的錯誤時就立即死掉。而進程的資源(如內存、 打開的文件等等)需要被自動釋放。
通用服務器(Server)。進程(Process)可能是一個普通的工作者(Worker),也可以 是服務器(Server)。通用服務器架構實現了一套高可靠的服務器模型。
大致想象了下實現,已經基本有譜。