我需要使用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