NetworkManager 是 ZerOS 内核的全局网络管理器,使用 Service Worker 截取所有网络请求进行统一处理与管理。提供网络状态监控、请求拦截、缓存管理、电池信息等功能。
KernelLogger - 内核日志系统(用于日志输出)网络管理器在系统启动时自动初始化(通过构造函数):
// 网络管理器是单例,通过 POOL 获取
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
isOnline()检查网络连接状态。
返回值: boolean - 是否在线
示例:
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
if (networkManager.isOnline()) {
console.log('网络已连接');
} else {
console.log('网络已断开');
}
getConnectionInfo()获取网络连接信息(如果支持)。
返回值: Object|null - 连接信息对象
{
effectiveType: string, // 有效连接类型(如 '4g', '3g')
downlink: number, // 下行速度(Mbps)
rtt: number, // 往返时间(ms)
saveData: boolean, // 是否启用数据节省模式
type: string, // 连接类型
downlinkMax: number // 最大下行速度(Mbps)
}
示例:
const connectionInfo = networkManager.getConnectionInfo();
if (connectionInfo) {
console.log(`连接类型: ${connectionInfo.effectiveType}`);
console.log(`下行速度: ${connectionInfo.downlink} Mbps`);
}
getAllNavigatorNetworkData()获取所有 navigator 网络相关数据。
返回值: Object - 所有网络相关数据
示例:
const networkData = networkManager.getAllNavigatorNetworkData();
console.log('网络数据:', networkData);
getNetworkStateSnapshot()获取当前网络状态快照。
返回值: Object - 网络状态快照
{
online: boolean,
timestamp: number,
connectionInfo: Object|null,
navigatorData: Object,
batteryInfo: Object|null,
stats: Object
}
示例:
const snapshot = networkManager.getNetworkStateSnapshot();
console.log('网络状态快照:', snapshot);
enableNetwork()启用网络。
示例:
networkManager.enableNetwork();
disableNetwork()禁用网络。
示例:
networkManager.disableNetwork();
toggleNetwork()切换网络启用状态。
返回值: boolean - 切换后的状态
示例:
const enabled = networkManager.toggleNetwork();
console.log(`网络已${enabled ? '启用' : '禁用'}`);
isNetworkEnabled()检查网络是否启用。
返回值: boolean - 网络是否启用
示例:
if (networkManager.isNetworkEnabled()) {
console.log('网络已启用');
}
fetch(url, options)发送网络请求(通过 Service Worker)。
参数:
url (string): 请求 URLoptions (Object): 请求选项(可选)返回值: Promise<Response> - 响应 Promise
示例:
try {
const response = await networkManager.fetch('https://api.example.com/data');
const data = await response.json();
console.log('数据:', data);
} catch (error) {
console.error('请求失败:', error);
}
setCache(url, response, ttl)设置请求缓存。
参数:
url (string): 请求 URLresponse (Object): 响应数据ttl (number): 缓存时间(毫秒,默认 60000)示例:
networkManager.setCache('https://api.example.com/data', {
status: 200,
body: JSON.stringify({ data: 'cached' }),
headers: {}
}, 300000); // 缓存 5 分钟
getCache(url)获取请求缓存。
参数:
url (string): 请求 URL返回值: Object|null - 缓存的响应数据
示例:
const cached = networkManager.getCache('https://api.example.com/data');
if (cached) {
console.log('使用缓存:', cached);
}
clearCache(url)清除请求缓存。
参数:
url (string): 可选的 URL,如果提供则只清除该 URL 的缓存,否则清除所有缓存示例:
// 清除指定 URL 的缓存
networkManager.clearCache('https://api.example.com/data');
// 清除所有缓存
networkManager.clearCache();
getBatteryInfo()获取电池信息(如果支持)。
返回值: Promise<Object|null> - 电池信息对象
{
charging: boolean, // 是否正在充电
chargingTime: number, // 充电时间(秒)
dischargingTime: number, // 放电时间(秒)
level: number // 电池电量(0-1)
}
示例:
const batteryInfo = await networkManager.getBatteryInfo();
if (batteryInfo) {
console.log(`电池电量: ${(batteryInfo.level * 100).toFixed(0)}%`);
console.log(`正在充电: ${batteryInfo.charging}`);
}
addNetworkStateListener(listener)添加网络状态监听器。
参数:
listener (Function): 监听器函数 (state) => {}返回值: Function - 取消监听的函数
示例:
const unsubscribe = networkManager.addNetworkStateListener((state) => {
console.log(`网络状态变化: ${state.online ? '在线' : '离线'}`);
console.log('连接信息:', state.connectionInfo);
});
// 取消监听
unsubscribe();
removeNetworkStateListener(listener)移除网络状态监听器。
参数:
listener (Function): 要移除的监听器函数示例:
networkManager.removeNetworkStateListener(listener);
addConnectionStateListener(listener)添加连接状态监听器。
参数:
listener (Function): 监听器函数 (state) => {}返回值: Function - 取消监听的函数
示例:
const unsubscribe = networkManager.addConnectionStateListener((state) => {
console.log('连接信息变化:', state.connectionInfo);
});
// 取消监听
unsubscribe();
removeConnectionStateListener(listener)移除连接状态监听器。
参数:
listener (Function): 要移除的监听器函数示例:
networkManager.removeConnectionStateListener(listener);
addNetworkEnabledListener(listener)添加网络启用状态监听器。
参数:
listener (Function): 监听器函数 (enabled) => {}返回值: Function - 取消监听的函数
示例:
const unsubscribe = networkManager.addNetworkEnabledListener((enabled) => {
console.log(`网络已${enabled ? '启用' : '禁用'}`);
});
// 取消监听
unsubscribe();
removeNetworkEnabledListener(listener)移除网络启用状态监听器。
参数:
listener (Function): 要移除的监听器函数示例:
networkManager.removeNetworkEnabledListener(listener);
destroy()清理资源(清理定时器和监听器)。
示例:
networkManager.destroy();
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
// 检查是否在线
if (networkManager.isOnline()) {
console.log('网络已连接');
// 获取连接信息
const connectionInfo = networkManager.getConnectionInfo();
if (connectionInfo) {
console.log(`连接类型: ${connectionInfo.effectiveType}`);
console.log(`下行速度: ${connectionInfo.downlink} Mbps`);
}
} else {
console.log('网络已断开');
}
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
// 监听网络状态变化
const unsubscribe = networkManager.addNetworkStateListener((state) => {
console.log(`网络状态: ${state.online ? '在线' : '离线'}`);
console.log('连接信息:', state.connectionInfo);
console.log('时间戳:', new Date(state.timestamp));
});
// 程序退出时取消监听
__exit__: function() {
unsubscribe();
}
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
// 检查网络是否启用
if (!networkManager.isNetworkEnabled()) {
console.log('网络已禁用,无法发送请求');
return;
}
// 发送请求
try {
const response = await networkManager.fetch('https://api.example.com/data', {
method: 'GET',
headers: {
'Content-Type': 'application/json'
}
});
if (response.ok) {
const data = await response.json();
console.log('数据:', data);
} else {
console.error('请求失败:', response.status);
}
} catch (error) {
console.error('请求错误:', error);
}
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
// 检查缓存
const cached = networkManager.getCache('https://api.example.com/data');
if (cached) {
console.log('使用缓存:', cached);
} else {
// 发送请求
const response = await networkManager.fetch('https://api.example.com/data');
const data = await response.json();
// 缓存响应(5 分钟)
networkManager.setCache('https://api.example.com/data', {
status: response.status,
body: JSON.stringify(data),
headers: {}
}, 300000);
}
const networkManager = POOL.__GET__("KERNEL_GLOBAL_POOL", "NetworkManager");
// 获取电池信息
const batteryInfo = await networkManager.getBatteryInfo();
if (batteryInfo) {
console.log(`电池电量: ${(batteryInfo.level * 100).toFixed(0)}%`);
console.log(`正在充电: ${batteryInfo.charging ? '是' : '否'}`);
if (batteryInfo.charging) {
console.log(`充电时间: ${Math.floor(batteryInfo.chargingTime / 60)} 分钟`);
} else {
console.log(`剩余时间: ${Math.floor(batteryInfo.dischargingTime / 60)} 分钟`);
}
}