sách gpt4 ai đã đi

tcp - 如何检查非阻塞 luasocket 客户端是否丢失了连接?

In lại 作者:可可西里 更新时间:2023-11-01 02:43:14 27 4
mua khóa gpt4 Nike

我正在为 OBS 编写一个 Lua 脚本,它通过 TCP 连接不断地从 ProPresenter(另一个程序)接收数据。我使用 LuaSocket 库建立连接,并按预期获得数据。

问题是,当我关闭 ProPresenter 时,我无法让我的脚本注册连接已关闭,同时我将 luasocket 超时设置为 0(因为它是非阻塞连接)。我需要脚本始终处于非阻塞状态,否则它会导致所有 OBS 停滞并且帧率降至 1 以下...

但是,如果我将超时设置为例如。 1 秒,luasocket 注册连接关闭没有问题,并根据 cái này例如,当超时为 0 时它也应该工作。但显然它没有,我怀疑这是因为该示例使用了旧版本的 Luasocket,而最新版本可能已经更改。

Đây là mã của tôi:

不注册连接因超时而关闭:

function recv_and_process_data()
local data

data, err, partial = s:receive()

if data ~= nil then
--process the recieved data. This part works.
elseif err == "closed" then
--doesn't get here because of timeout...
--inform script that the connection has closed
elseif err == "timeout" then
--goes here as soon as ProPresenter is closed
print(err .. " partial: " .. partial)
kết thúc
kết thúc

在连接关闭时注册,但使 OBS 停止:

function recv_and_process_data()
local data

s:settimeout(1) --timeout set to 1 second
data, err, partial = s:receive()
s:settimeout(0)

if data ~= nil then
--process the recieved data. This part works.
elseif err == "closed" then
--goes here when ProPresenter is closed
--inform script that the connection has closed
elseif err == "timeout" then
print(err .. " partial: " .. partial)
kết thúc
kết thúc

这也不起作用(如建议 đây ):

function recv_and_process_data()
local data

data, err, partial = s:receive(0)
if err == "closed" then
print(err .. " partial: " .. partial)
kết thúc
kết thúc

如果我无法正常工作,我想我必须尝试重新连接以查看 ProPresenters 服务器是否仍在运行。

1 Câu trả lời

我也想弄清楚这个问题。我发现一个非常小的 settimeout() 值仍然会返回一个错误,您可以使用但根本不会阻止程序。

Tôi sử dụng本地数据,Error = Client:settimeout(0.0001)

关于tcp - 如何检查非阻塞 luasocket 客户端是否丢失了连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52357621/

27 4 0
Bài viết được đề xuất: c++ - 通过 winsock 发送压缩字符串
Bài viết được đề xuất: javascript - d3.js 图表区域填充不同颜色
Bài viết được đề xuất: Java 代理示例正在创建堆栈溢出?
Bài viết được đề xuất: 如果连接失败,C# 总是重试 tcp 连接
可可西里
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com