例如,我有一個可信的客戶端和一臺服務器。客戶端想要在服務器上執行任意代碼。這可以通過使用RemoteActor來實現(序列化一個函數並通過網絡發送,反序列化並執行它)?scala中有沒有一種方法可以在使用RemoteActor的遠程節點上執行任意代碼?
4
A
回答
3
當前不是。序列化函數意味着將其字段存儲到對象輸出流中,並對其進行反序列化意味着從其他地方的對象輸入流中讀取函數對象。反序列化假設從對象輸入流中讀取的對象的類是JVM已知的。記住 - 功能只是場景背後的物體。
在這種情況下,服務器不知道正在序列化的函數對象的實際具體類,只是可能實現了接口。爲了支持這種功能,您必須找到相關功能的類文件,將其發送到服務器,然後使用自定義classloader將其加載到服務器上。然後,如果對象具有任何形式的狀態,則可以在客戶端上序列化對象,通過網絡發送它並在服務器上反序列化它。只有這樣你才能運行它的方法。假設你的函數對象是無狀態的,通常情況下,你可以跳過序列化/反序列化步驟。
編輯:
還要記住,該功能可以在內部保持引用他們的調用環境。這意味着你可能最終序列化與它一起函數對象,這可能是你的整個程序數據的環境..
4
下面是使用的URLClassLoader與遠程參與者的example,獲取類通過客戶端的http並在服務器上執行通用計算。
您可能也有興趣HotSwap technique適用於序列化Akka Actors。
相關問題
- 1. 有沒有一種方法可以繼續在JSP中執行Javascript,直到完全執行Java代碼。
- 2. 有沒有一種方法可以在Linux上使用C++
- 3. 有沒有一種方法可以在Twig模板中編寫多行代碼?
- 4. 有沒有一種方法,這段代碼可以失敗沒有迭代器?
- 5. 有沒有一種方法可以使用我的C#代碼編譯Javascript?
- 6. 有沒有一種方法可以在tesseract中使用Asterix(*)?
- 7. 有沒有一種方法可以在Polymer.js中使用Slick-Carousel?
- 8. 有沒有一種方法可以禁用Intellij中的Typescript代碼分析?
- 9. 有沒有一種方法可以在沒有os.chmod的* nix系統下使用Python創建可執行文件?
- 10. 有沒有一種方法可以在使用ReSharper的.NET項目中查找所有未使用的代碼?
- 11. 有沒有一種方法可以在直播網站上使用drawWindow()方法?
- 12. 有沒有一種方法可以在Magento中進行搜索?
- 13. 有沒有一種方法可以在Mongoose中進行投影?
- 14. 有沒有一種方法可以自己從java代碼格式化代碼?
- 15. 有沒有一種方法可以在Google表單中執行網絡搜索?
- 16. 有沒有一種方法可以在動畫中打開代碼輔助xml
- 17. 有沒有一種方法可以跟蹤使用renderer.listenGlobal()偵聽點擊時執行點擊的位置?
- 18. 有沒有一種使用maven來運行可執行jar的好方法?
- 19. 僅使用現有代碼執行任意代碼
- 20. 有沒有一種方法可以在GUI中使用python編寫上標?
- 21. 有沒有一種方法可以一次使用Sequelize
- 22. 在ColdFusion中,有沒有一種方法可以確定代碼在哪個服務器上運行?
- 23. 有沒有一種在Windows中使用遠程git倉庫的好方法?
- 24. 有沒有一種方法可以支持scalap grpc並在scala中運行應用程序
- 25. 有沒有一種方法可以在XTK中渲染可縮放的點?
- 26. 有沒有一種方法可以用Javascript進行驗證?
- 27. 有沒有辦法在子進程中運行節點任務?
- 28. 有沒有一種方法可以調試使用installshield universal創建的安裝程序可執行文件?
- 29. 有沒有一種方法可以在斯卡拉的Int上使用++?
- 30. 在Jface中有沒有一種方法可以指定要在Treeviewer中用於節點的圖標的大小?
但是,序列化只會將函數的字段值存儲到流中。 'apply'方法的重定義是特定於實現'Function'接口的匿名類的。如果我的理解正確,重新定義的匿名類的apply方法中的實際代碼不會被序列化。對?在這種情況下,服務器上的遠程角色將如何知道僅在客戶端已知的'apply'方法的主體? – axel22 2010-11-12 09:10:18
同意,已在此主題上找到一個主題:http://scala-programming-language.1934581.n4.nabble.com/Passing-functions-to-remote-actor-td2991157.html – 2010-11-12 10:29:01