我需要使用C++中的套接字將lua_state發送到服務器。我如何序列化一個lua_State以便它可以通過網絡發送?序列化lua_State以通過網絡發送
4
A
回答
3
根據您的需求,您有多種選擇。您可以嘗試使用Pluto Library。這是一個「重權重」序列化庫:
冥王星是一個庫,它允許用戶以「的Lua宇宙」的任意大的部分寫入到平面文件,並在以後讀回相同或不同的Lua宇宙。對象引用被適當地處理,使得該文件包含重新創建所述對象所需的一切。
你也可以嘗試lper,它採用Linux Persistent Memory。
注意,您將有發送自定義的C函數和用戶數據的問題...
如果你其實並不需要發送整個lua_State
(爲什麼你需要嗎?),你可以去看看在Lua-users Wiki的TableSerialization頁面。也許你可以通過發送包含你需要的整個「狀態」的序列化(可能很大)的Lua表來解決你的問題。
3
序列化完整的lua_State
是根本不可能的。畢竟,即使您可以傳輸存儲在一個存儲器中的內存,lua_State
也會附帶許多C函數。你怎麼能序列化網絡中的其中一個?
你可以期望的最好的方式是嘗試記住你在一個Lua州做了什麼,並告訴整個網絡上的程序也這樣做。這將需要編寫一個Lua界面的抽象概念,您可以將其稱爲,而不是Lua界面的。它會報告你對網絡程序採取的每一個行動。文件加載也必須將該文件傳輸到聯網的程序。
基本上,你必須採取每個Lua函數,並寫一個新版本,它調用舊的並告訴聯網的程序你在做什麼。
0
嗯,我不知道如何將實際的lua_state傳遞給套接字。也許你可以提取lua_state中包含的信息,然後通過套接字傳遞提取的信息?
std::string name(lua_tostring(L,1));
int age = lua_tonumber(L,2);
//then send name and string over the socket somehow...
如果你有從,你想轉發到Lua插座任何迴應只是像做
//get response from socket and push response to lua
lua_pushnumber(L, response);
return 1; //indicate how arguments you are returning.
希望它能幫助。祝你好運!
相關問題
- 1. 如何序列化BouncyCastle中的PKCS10CertificationRequest以通過網絡發送?
- 2. 通過網絡發送UITouches
- 3. 你如何通過網絡發送一個序列化的對象?
- 4. 通過TCP發送序列化對象
- 5. 序列化XmlDocument&通過HTTPWebRequest發送
- 6. 序列化數據類型以通過F#網絡使用
- 7. 通過網絡發送按鍵
- 8. 通過網絡發送結構
- 9. 通過網絡發送屏幕截圖
- 10. 通過網絡發送sqlite數據庫
- 11. 通過網絡發送密碼
- 12. 網絡 - 通過發送端口
- 13. 通過網絡發送對象向量
- 14. 通過網絡發送文件夾
- 15. 通過二進制序列化/反序列化通過TCP發送文件
- 16. 通過網絡內的網絡發送數據
- 17. 是否可以通過網絡發送數組?
- 18. 投浮法陣列/從字符*和發送通過網絡
- 19. 通過網絡發送的散列映射的完整性
- 20. 通過網絡優化Dictionary.EnumerateFiles
- 21. Java如何通過網絡通過UI按鈕發送數據
- 22. 序列化並通過網絡同步數據結構C
- 23. 通過網絡遠程處理序列化實體集
- 24. C# - 通過網絡序列化數據包
- 25. 如何通過Moshi JSON序列化程序發送Date對象?
- 26. 通過其他應用程序發送序列化文件
- 27. 網絡I/O序列化
- 28. 通過網絡服務發送通知到Android手機
- 29. 如何通過網絡瀏覽器發送發佈請求
- 30. 如何簡單地序列化複雜結構並通過Qt網絡發送它
+1不僅僅是函數引用,還有各種C函數中的文件句柄,套接字和外部狀態。 – BMitch 2012-02-09 23:21:11
對不起正在挖掘一個老問題,但如何將C函數引用存儲在Lua中? PiL書說'pushcfunction'「推入一個類型函數的值」。 C函數指針本質上只是規則的內存位置,所以我會想象Lua函數類型不應該超過lightuserdata。由於func指針指向.text段,我希望它們至少在相同的架構上不會改變,所以爲什麼這會成爲序列化的問題? (或者我想我的問題是函數指針保持不變或者它們以某種方式變化?) – mtsvetkov 2013-02-26 00:38:58
@mtsvetkov:幾乎每個現代操作系統都會隨機化可執行代碼加載的內存位置。所以沒有理由期望函數指針在同一個程序的兩個獨立執行中處於相同位置,即使在同一臺計算機上。所以再次,不,這不起作用。 – 2013-02-26 00:53:30