官网:https://web-check.xyz/
github: https://github.com/lissy93/web-check
目前仪表盘将显示:IP 信息、SSL 证书链、DNS 记录、Cookie、标头、域名信息、搜索抓取规则、页面地图、服务器位置、重定向记录、开放端口、路由追踪、DNS 安全扩展、网站性能、跟踪器、关联主机名、碳足迹。
官网:https://web-check.xyz/
github: https://github.com/lissy93/web-check
目前仪表盘将显示:IP 信息、SSL 证书链、DNS 记录、Cookie、标头、域名信息、搜索抓取规则、页面地图、服务器位置、重定向记录、开放端口、路由追踪、DNS 安全扩展、网站性能、跟踪器、关联主机名、碳足迹。
本文针对服务端主动向客户端推送数据的常见业务场景(数据大屏实时刷新、消息中心未读提醒、在线聊天等),对比分析了三类主流实现方案的优劣,重点介绍了 SSE(Server-Sent Events,服务端推送事件) 的使用场景、核心API与落地实践,帮助开发者根据业务需求选择更合适的推送方案。
| 方案 | 核心原理 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|---|
| 轮询 | 客户端定时/不间断向服务端发起HTTP请求,模拟“推送”效果 | 实现简单,兼容所有浏览器 | 1. 每次请求都要经历HTTP建连/断连流程,资源浪费严重 2. 长期占用浏览器并发名额(Chrome同域名并发限制为6) 3. 轮询间隔短则耗资源,间隔长则实时性差 |
仅作为浏览器完全不支持WebSocket和SSE的兜底方案,不推荐常规使用 |
| WebSocket | 基于ws/wss协议的全双工双向通信,客户端和服务端可随时互相发送数据 |
1. 双向通信能力强 2. 实时性极高 3. 现代浏览器兼容性良好 |
1. 是独立于HTTP的新协议,需要服务端额外适配支持 2. 协议复杂度高,相对“重量级” 3. 断线重连需要自行实现 |
需要双向交互的场景:在线聊天、多人协作编辑、实时游戏等 |
| SSE | 基于HTTP/1.1的单向长连接,仅支持服务端主动向客户端推送数据 | 1. 轻量,协议复杂度远低于WebSocket 2. 完全复用现有HTTP服务端生态,无需额外适配 3. 默认支持断线重连 4. 客户端资源消耗低 5. 支持自定义数据类型 |
1. 仅支持单向通信(服务端→客户端) 2. IE浏览器、小程序不支持 |
仅需服务端单向推送的场景:数据大屏实时数据、消息中心通知、系统公告、日志实时输出等 |
readyState)通过EventSource实例的readyState属性可获取当前连接状态:
0(对应常量EventSource.CONNECTING):连接未建立,或连接已断线正在重试1(对应常量EventSource.OPEN):连接已建立,可正常接收数据2(对应常量EventSource.CLOSED):连接已断开,且不会重连| 事件名 | 触发时机 | 典型用途 |
|---|---|---|
open |
连接成功建立时触发 | 初始化页面状态、打印连接成功日志 |
message |
收到服务端推送的数据时触发 | 解析数据并更新页面UI |
error |
发生通信错误、连接中断时触发 | 提示用户连接异常、记录错误日志 |
SSE要求服务端返回特定的HTTP响应头和数据格式:
Content-Type: text/event-stream # 声明SSE流式数据格式
Cache-Control: no-cache # 禁止缓存,保证数据实时性
Connection: keep-alive # 声明长连接
数据体格式必须以data:开头,两个换行符\n\n结束:
data: {"message": "Current time is 10:30:00"}\n\n
文章提供了原生HTML前端 + Node.js Express后端的完整可运行示例,无需任何框架即可验证SSE效果:
window.EventSource,不支持则抛出错误new EventSource('http://localhost:8088/sse/')建立SSE连接open/message/error事件,收到数据后动态创建<li>元素插入页面<script>
if (!!window.EventSource) {
const source = new EventSource('http://localhost:8088/sse/');
source.onopen = () => console.log("SSE连接已建立");
source.onmessage = (event) => {
const data = JSON.parse(event.data);
const li = document.createElement("li");
li.innerHTML = data.message;
document.getElementById("ul").appendChild(li);
};
source.onerror = () => console.log("SSE连接中断");
} else {
throw new Error("当前浏览器不支持SSE");
}
</script>
setInterval每秒向客户端推送一次当前时间const express = require('express');
const app = express();
const port = 8088;
// 跨域配置
app.all("*", (req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With");
res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS");
req.method === 'OPTIONS' ? res.sendStatus(200) : next();
});
// SSE接口
app.get("/sse", (req, res) => {
res.set({
'Content-Type': 'text/event-stream',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive'
});
setInterval(() => {
const data = { message: `Current time is ${new Date().toLocaleTimeString()}` };
res.write(`data: ${JSON.stringify(data)}\n\n`);
}, 1000);
});
app.listen(port, () => console.log(`服务启动成功:http://localhost:${port}`));
Gatus 是一款用 Go 开发的主动式健康状态监控面板(GitHub 10k+ Star),用于填补传统监控工具的盲区:
主动健康检查 + 可视化状态页 + 多通道告警| 特性 | 说明 |
|---|---|
| 灵活条件语法 | 不止校验状态码,可基于响应体(支持 JSONPath)、响应耗时、SSL 证书/域名过期时间等配置规则,支持数组长度、多值匹配、正则等函数,也可用于简易 UAT 测试。 |
| Suite 端到端监控 | 支持串联多步请求,前序请求的返回结果可作为后续请求参数,实现「创建-更新-校验-删除」等完整业务流的可用性监控。 |
| 外部端点推送 | 内网服务无需暴露端口,可通过 Agent 主动推送健康状态,支持心跳检测,超时未上报即触发告警。 |
| 40+ 告警通道 | 覆盖协作工具(Slack/Discord/企业微信)、PagerDuty、短信、邮件、主流云厂商平台,支持自定义 Webhook;可配置「连续失败 N 次才告警」「恢复自动通知」。 |
| SSH 隧道 | 可通过跳板机监控 Kubernetes 集群内或私有云内网服务。 |
| 生态兼容 | 暴露 Prometheus 指标,可对接现有监控体系;生成 SVG 状态徽章,可直接嵌入 GitHub README、文档站点。 |
| 低资源与安全 | Go 实现,生产环境内存占用仅几十 MB,支持配置热加载、断网防误报,支持 Basic Auth/OIDC/mTLS 等安全特性。 |
支持 Docker、Kubernetes Helm、Terraform、单二进制直接运行;配置文件支持多 YAML 文件拆分合并,便于多团队协作管理。
| 存储类型 | 适用场景 |
|---|---|
| Memory | 快速体验,重启后数据丢失 |
| SQLite | 轻量单机部署、小团队/个人项目 |
| PostgreSQL | 生产环境、高可用需求 |
生产环境推荐 PostgreSQL + 写穿缓存,提升仪表盘加载速度。
| 特性 | Gatus | Uptime Kuma | Healthchecks.io |
|---|---|---|---|
| 开发语言 | Go | Node.js | Python |
| 协议支持 | 极广(含 gRPC/SSH 等) | 中等 | 较少 |
| 条件规则 | 灵活(支持 JSONPath/函数) | 简单 | 简单 |
| 工作流监控 | 支持 | 不支持 | 不支持 |
| SSH 隧道 | 支持 | 不支持 | 不支持 |
| 资源占用 | 极低 | 中等 | 中等 |
Gatus 更适合需要深度定制、监控复杂业务场景的技术团队。
用 Android 手机做 SMS 网关,通过 HTTP API 收发短信,完全自托管、数据自主可控
无需对接第三方商业短信平台,把闲置安卓手机变成私有短信网关:
用 Android 手机做 SMS 网关,通过 HTTP API 收发短信,完全自托管、数据自主可控
来源:「AI开源提效指南」公众号分享
无需对接第三方商业短信平台,把闲置安卓手机变成私有短信网关:
你的业务/脚本 → 调用 /v1/messages/send 接口
↓(立即返回 202 Accepted,不阻塞)
HTTPSMS 服务端(Go + Fiber)→ 异步通过 FCM 通知安卓端
↓
安卓 App(Kotlin)→ 调用系统短信能力收发信,回传状态
| 特性 | 说明 |
|---|---|
| 多语言支持 | 官方 SDK 覆盖 Go / Python / JS / Java / C# / PHP 等,curl 可直接调用 |
| 端到端加密 | AES-256 加密,密钥仅存于本地手机,服务器被攻破也无法解密短信 |
| 流量管控 | 支持自定义发送速率、消息过期时间,避免推送延迟、突发流量导致异常 |
| 低成本 | 开源免费(AGPL-3.0),无按条收费,仅需一台安卓机 |
| 特性 | HTTPSMS | Twilio/云短信 | 自建 GSM Modem |
|---|---|---|---|
| 成本 | 免费/极低 | 按条收费 | 硬件采购成本 |
| 端到端加密 | 支持 | 不支持 | 本地处理 |
| 完全自托管 | 支持 | 不支持 | 支持 |
| 开源 | AGPL-3.0 | 闭源 | 多数闭源 |
| Webhook 转发 | 原生支持 | 部分支持 | 很少支持 |
传统网络排查工具往往顾此失彼,RustNet 旨在解决以下核心问题:
| 传统工具 | 存在的短板 |
|---|---|
| netstat / ss | 只能看到连接,无法关联到具体进程 |
| tcpdump / Wireshark | 抓包数据难绑定应用,远程服务器使用门槛高 |
| X11 转发 | 配置极其繁琐,体验差 |
核心诉求:快速定位「哪个进程在和谁通信、用的什么协议、占了多少带宽」。
RustNet 是一款用 Rust 编写的跨平台终端 UI(TUI)网络监控工具。
| 平台 | 安装命令 |
|---|---|
| macOS / Linux (Homebrew) | brew tap domcyrus/rustnet && brew install rustnet |
| Ubuntu 25.10+ | sudo add-apt-repository ppa:domcyrus/rustnet && sudo apt install rustnet |
| 通用 (Cargo) | cargo install rustnet-monitor |
| Windows (Chocolatey) | choco install rustnet (需先装 Npcap) |
抓包需要权限,推荐以下两种方式之一:
方式一:临时使用(最简单)
sudo rustnet
方式二:永久免 sudo(Linux)
sudo setcap 'cap_net_raw,cap_bpf,cap_perfmon=eip' $(which rustnet)
| 操作类型 | 命令/快捷键 | 说明 |
|---|---|---|
| 启动参数 | -i eth0 |
指定监听网卡 |
--resolve-dns |
开启反向 DNS 解析 | |
-r 500 |
设置刷新间隔(毫秒) | |
| 界面交互 | / |
进入过滤模式(如 process:chrome) |
s |
切换排序列(找流量大户) | |
a |
开启进程分组视图 | |
i |
切换到网卡统计视图 | |
Enter |
查看单条连接详情(含 SNI 域名) |