跳转到内容

net.ping

此模块用于检测主机网络的连通性和延迟。

提示

使用此模块需要先导入:import("net.ping")

net.ping 模块提供了跨平台的主机 Ping 检测功能。它会自动查找系统可用的工具(优先 curl,然后 wget,最后 ping),并使用合适的参数进行检测。

ping

  • 对主机列表执行 Ping 检测

函数原型

API

lua
ping(hosts, opt?)

参数说明

参数描述
hosts必需。主机地址字符串或主机地址数组
opt可选。选项参数表,支持:
- force - 是否强制刷新缓存(默认为 false)

返回值说明

类型描述
table返回主机地址到延迟时间的映射表,单位为毫秒,失败或无响应时返回 65535

用法说明

对单个主机进行 Ping 检测:

lua
import("net.ping")

local results = ping("github.com")
print("延迟:", results["github.com"], "ms")

对多个主机进行 Ping 检测:

lua
import("net.ping")

local results = ping({"github.com", "gitlab.com", "git.com"})
for host, time in pairs(results) do
    print(host, ":", time, "ms")
end

强制刷新缓存重新检测:

lua
import("net.ping")

-- 不读取缓存,强制重新检测
local results = ping({"github.com", "gitlab.com"}, {force = true})

net.ping 模块支持多种检测方式:

  1. 使用 curl:如果系统安装了 curl,会使用 curl 命令检测(返回值为毫秒)
  2. 使用 wget:如果未安装 curl,会尝试使用 wget 命令检测(返回值为毫秒)
  3. 使用 ping:如果前两者都不可用,会使用系统的 ping 命令检测(Windows/macOS/Linux 的参数不同)

检测结果会被缓存,后续请求会直接使用缓存结果,除非设置了 force = true。支持并发生检测以提高效率。以下是一个完整的示例:

lua
import("net.ping")

-- 检测多个镜像源的延迟
local mirrors = {
    "github.com",
    "gitee.com", 
    "code.csdn.net"
}

print("正在检测镜像源延迟...")
local results = ping(mirrors)

-- 找出延迟最低的镜像源
local best_mirror = nil
local min_time = math.maxinteger
for host, time in pairs(results) do
    print(string.format("%s: %d ms", host, math.floor(time)))
    if time < min_time then
        min_time = time
        best_mirror = host
    end
end

if best_mirror then
    print(string.format("\n最快镜像源: %s (延迟: %d ms)", best_mirror, math.floor(min_time)))
else
    print("未找到可用镜像源")
end