我想創建可以從文件系統中提供資源的演員。理想情況下[1]我希望每個目錄和每個文件都有一個actor。但我不想創建整個actor樹層次結構,因爲我希望儘可能節省內存和資源。懶洋洋地創建Akka演員層次結構
據我所知,一名演員只能在其父母存在的情況下創建。懶惰地創建這些層次結構的最好方法是什麼?有沒有一個鉤子可以用來捕捉失敗並快速創建演員層次結構,並且有效地這樣做?
通過這樣做,我可以發送fetch
,update
,delete
,...消息給演員,而阿卡演員系統將會處理同步問題。這然後可以擴展到更復雜的演員的行爲後來隨着虛擬文件或者這樣的觀念......
一些可能的解決方案,我能想到的:
- 運行
context.actorFor(path)
如果返回死信郵箱,嘗試創建演員層次結構。這聽起來不是一個好的解決方案。 - 將消息發送給根演員,並使用
getOrCreateChild
方法將其轉發給其子代。但是,這可能是低效的? (或者這就是阿卡本身在幕後做的事情......(我應該看看)) - 不這樣做,只是創建一個演員,委派每個消息到一個目錄演員爲飛行創建的每個目錄所請求的文件在堆棧溢出問題"on demand actor get or else create"的答案中解釋。這對於捕獲目錄刪除語義來說不是很好。 (會更有效率嗎?)
[1]我不確定這是否理想,但我認爲我應該先嚐試這種方法。另一種方法是爲每個目錄創建一個actor並將其存儲在散列映射中。
我剛剛發現了AKKA代理商。我想知道是否爲了映射文件系統(爲了Web服務器的目的),代理將不會更好,因爲我期望在這個數據結構上的讀取更爲常見。這些文件很少,我不確定那些文件在哪裏。沒有說明Agent有多少內存,並且改變Agent的行爲似乎並不容易。一個人的應用程序也需要從URIs-> Agents –