hi all
如下:
client <---- ngx_lua <-------- backend
我的backend 采用POST方式将数据一个chunk一个chunk的给ngx_lua , client通过GET请求一个一个的chunk数据。
我的backend POST请求ngx_lua的代码如下:
local elapsed, err = flv_channel_lock:lock("flv_channel_key")
local succ, err, forcible = flv_channel:set(guid .. count, data) --- 把POST上来的chunk数据设置到flv_channel共享内存中
local ok, err = flv_channel_lock:unlock()
local elapsed, err = flv_stream_post_ok_lock:lock("flv_stream_post_ok_lock")
local succ, err, forcible = flv_stream_post_ok:set(guid, 0) -- 设置完chunk数据, 将互斥量置为0
local ok, err = flv_stream_post_ok_lock:unlock()
我的client请求ngx_lua数据的代码如下:
while true do
local value, flags = flv_stream_post_ok:get(guid) -- 首先读取flv_stream_post_ok中存取的互斥量
if value == 0 then --- 如果互斥量==0 那么就读取共享内存数据 ,在 ngx.print 给客户端
local value, flags = flv_channel:get(guid .. count) --- 读取共享内存的chunk数据
ngx.print(value)
ngx.flush(true)
local elapsed, err = flv_stream_post_ok_lock:lock("flv_stream_post_ok_lock")
local succ, err, forcible = flv_stream_post_ok:set(guid, 1) --- 发送给客户端后, 将互斥量置为1
local ok, err = flv_stream_post_ok_lock:unlock()
end
end
由于上面的代码是while死循环, 所以cpu会跑到100% 。 所以我希望上面红色语句能够做到 非阻塞 同步。 不知道有没有什么好的办法?
--
Best Regards,
Harold Miao