原 Electron 版在这台 Windows 机器上无法启动(0x80000003 崩在 V8 初始化), 整个业务逻辑用 Go 重写,前端界面与协议结论完全保留。 - internal/eh: 协议核心,画廊页分页 -> /s/ -> hath 直链 -> 下载 - internal/core: 并发引擎 / 状态存储 / 目录模板 / 油猴桥口 - app.go: Wails 绑定层,替代 Electron IPC - frontend/js/api.js: 适配层,renderer.js 一行未改 - 37 个测试,含 httptest 模拟 EH 的端到端链路验证 相比 Electron 版:90MB -> 12.4MB,180MB 内存 -> 27MB,构建 90s -> 2s。 顺带修掉原版代理探测的 bug(永远返回第一个端口,从不等连接结果)。
40 lines
679 B
Go
40 lines
679 B
Go
package core
|
|
|
|
// 测试辅助:起一个真实监听端口,用来验证代理探测真的等了连接结果
|
|
|
|
import (
|
|
"net"
|
|
"strconv"
|
|
)
|
|
|
|
type testListener struct {
|
|
ln net.Listener
|
|
}
|
|
|
|
func (l *testListener) port() int {
|
|
addr := l.ln.Addr().(*net.TCPAddr)
|
|
return addr.Port
|
|
}
|
|
|
|
func (l *testListener) Close() error { return l.ln.Close() }
|
|
|
|
func net_listen_loopback() (*testListener, error) {
|
|
ln, err := net.Listen("tcp", "127.0.0.1:0")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
// 接受连接,避免 backlog 满
|
|
go func() {
|
|
for {
|
|
c, err := ln.Accept()
|
|
if err != nil {
|
|
return
|
|
}
|
|
c.Close()
|
|
}
|
|
}()
|
|
return &testListener{ln: ln}, nil
|
|
}
|
|
|
|
var _ = strconv.Itoa
|