gpt4 book ai didi

c - 将 ZMQ 上下文从 C 传递到嵌入式 Lua

转载 作者:太空狗 更新时间:2023-10-29 15:35:44 25 4
gpt4 key购买 nike

在我的 C 应用程序中,我有一个 ZMQ 上下文,我想与所有 Lua 状态共享。我使用 Lua 5.2 版和 ZMQ 3.2 版。

我想为 Lua 使用一个已经可用的绑定(bind),比如 lzmq。

例如:

// create ZMQ context
void *ctx = zmq_ctx_new();
...
// create Lua State
lua_State *L = luaL_newstate();
...
// push the context or something
lua_setglobal(L, "MY_ZMQ_CONTEXT");

然后能够以某种方式在 Lua 中使用 ZMQ 上下文(例如使用 lzmq):

local zmq = require "lzmq"
require "utils"

print_version(zmq)

local ctx = MY_ZMQ_CONTEXT -- ???

local skt = ctx:socket{zmq.REQ,
linger = 0, rcvtimeo = 1000;
connect = "inproc://hello";
}

skt:send("hello from cli")
print_msg("recv: ",skt:recv())

skt:close()

我该如何做这样的事情?使用 lzmq 或任何其他 ZMQ Lua 绑定(bind)?

最佳答案

您可以设置 lightuserda 并使用 init_ctx 函数。

lua_pushlightuserdata(L, ctx);
lua_setglobal(L, "MY_ZMQ_CONTEXT");

local zmq = require "lzmq"
local ctx = zmq.init_ctx(MY_ZMQ_CONTEXT)

在这种情况下,您无法关闭来自 Lua 的上下文。我有想法在下一个版本中添加此功能。

lzmq 也有 C 函数 LUAZMQ_EXPORT int luazmq_context (lua_State *L, void *ctx, unsigned char own)。你可以像这样包装 contex。

luazmq_contex(L, ctx, 0);
// or if you want hase ability to destroy contex from Lua
// luazmq_contex(L, ctx, 1);

// MY_ZMQ_CONTEXT is lzmq context
lua_setglobal(L, "MY_ZMQ_CONTEXT");

关于c - 将 ZMQ 上下文从 C 传递到嵌入式 Lua,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071632/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com