簡體   English   中英

序列化lua_State以通過網絡發送

[英]Serialize lua_State to sent over network

我需要使用C ++中的套接字將lua_state發送到服務器。 我如何序列化lua_State以便它可以通過網絡發送?

從根本上說,序列化一個完整的lua_State是不可能的。 畢竟,即使你可以傳輸存儲在一個中的內存, lua_State附加很多C函數。 你怎么能通過網絡序列化其中一個?

您可以期望的最好的方法是嘗試記住您在一個Lua狀態下所做的事情,並通過網絡告訴程序執行相同的操作。 這將需要編寫Lua接口的抽象, 而不是 Lua的接口。 它會報告您對聯網計划采取的每項操作。 文件加載還必須將該文件傳輸到聯網程序。

基本上,你必須采用每個Lua函數並編寫一個新版本的函數來調用舊函數並告訴聯網程序你正在做什么。

根據您的需要,您有多種選擇。 您可以嘗試使用Pluto庫 它是一個“重量級”序列化庫:

Pluto是一個庫,允許用戶將“Lua universe”的任意大部分寫入平面文件,然后將它們讀回相同或不同的Lua Universe。 適當地處理對象引用,使得文件包含重新創建有問題的對象所需的一切。

您也可以嘗試使用Linux持久內存的 lper

請注意,發送自定義C函數和userdata時遇到問題...

如果您實際上不需要發送整個lua_State (為什么需要它?),您可以查看Lua-users Wiki中的TableSerialization頁面。 也許你可以通過發送包含你需要的整個“狀態”的序列化(可能很大)的Lua表來解決你的問題。

好吧,我不知道你如何將實際的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.

希望能幫助到你。 祝好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM