mirror of
https://github.com/ZxwyWebSite/lx-source.git
synced 2025-05-23 21:37:42 +08:00
commit
a1302ad0b3
8
main.go
8
main.go
@ -95,6 +95,14 @@ func init() {
|
||||
env.Loger.NewGroup(`DebugMode`).Debug(`已开启调试模式, 将输出更详细日志 (配置文件中 [Main].Debug 改为 false 关闭)`)
|
||||
}
|
||||
genAuth()
|
||||
if env.Config.Main.SysLev {
|
||||
sl := env.Loger.NewGroup(`(beta)SysLev`)
|
||||
if err := ztool.Sys_SetPriorityLev(ztool.Sys_GetPid(), ztool.Sys_PriorityHighest); err != nil {
|
||||
sl.Error(`系统优先级设置失败: %v`, err)
|
||||
} else {
|
||||
sl.Warn(`成功设置较高优先级,此功能可能导致系统不稳定`)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
8
src/env/env.go
vendored
8
src/env/env.go
vendored
@ -9,7 +9,7 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
Version = `1.0.2-β0.2`
|
||||
Version = `1.0.2-β0.3`
|
||||
)
|
||||
|
||||
var (
|
||||
@ -29,6 +29,7 @@ type (
|
||||
Gzip bool `comment:"开启GZip (对已压缩的内容使用会产生反效果)"`
|
||||
LogPath string `comment:"文件日志路径,不填禁用"`
|
||||
Print bool `comment:"控制台输出"`
|
||||
SysLev bool `comment:"(实验性) 设置进程高优先级"`
|
||||
}
|
||||
Conf_Apis struct {
|
||||
// BindAddr string `comment:"外部访问地址,用于生成文件链接"`
|
||||
@ -65,7 +66,8 @@ type (
|
||||
Force bool `comment:"强制推送更新" json:"force"`
|
||||
}
|
||||
Conf_Cache struct {
|
||||
Mode string `comment:"缓存模式 0: off(关闭), 1: local(本地), 2: cloudreve(云盘 未完善)"`
|
||||
Mode string `comment:"缓存模式 0: off(关闭), 1: local(本地), 2: cloudreve(云盘 未完善)"`
|
||||
LinkMode string `comment:"外链样式 1: static(永久链), 2: dynamic(临时链)"`
|
||||
// 本地
|
||||
Local_Path string `comment:"本地缓存保存路径"`
|
||||
Local_Bind string `comment:"本地缓存外部访问地址"`
|
||||
@ -95,6 +97,7 @@ var (
|
||||
Gzip: false,
|
||||
LogPath: `/data/logfile.log`,
|
||||
Print: true,
|
||||
SysLev: false,
|
||||
},
|
||||
Apis: &Conf_Apis{
|
||||
// BindAddr: `http://192.168.10.22:1011/`,
|
||||
@ -123,6 +126,7 @@ var (
|
||||
},
|
||||
Cache: &Conf_Cache{
|
||||
Mode: `local`, // 缓存模式
|
||||
LinkMode: `1`,
|
||||
Local_Path: `data/cache`,
|
||||
Local_Bind: `http://127.0.0.1:1011/`,
|
||||
Cloud_Site: `https://cloudreveplus-demo.onrender.com/`,
|
||||
|
65
src/middleware/dynlink/dynlink.go
Normal file
65
src/middleware/dynlink/dynlink.go
Normal file
@ -0,0 +1,65 @@
|
||||
package dynlink
|
||||
|
||||
import (
|
||||
"lx-source/src/caches"
|
||||
"lx-source/src/caches/localcache"
|
||||
"lx-source/src/env"
|
||||
|
||||
// "lx-source/src/middleware/util"
|
||||
// "net/http"
|
||||
|
||||
// "github.com/ZxwyWebSite/ztool"
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type DynLink struct {
|
||||
Mode uint8
|
||||
Link string
|
||||
}
|
||||
|
||||
func LoadHandler(r *gin.Engine) {
|
||||
loger := env.Loger.NewGroup(`DynLink`)
|
||||
if cache, ok := caches.UseCache.(*localcache.Cache); ok {
|
||||
loger.Debug(`UseStatic`)
|
||||
r.Static(`/file`, cache.Path)
|
||||
}
|
||||
// 动态链暂未完成...
|
||||
}
|
||||
|
||||
// func FileHandler() gin.HandlerFunc {
|
||||
// loger := env.Loger.NewGroup(`DynLink`)
|
||||
// // 为了兼容原静态链,必须设置3个参数
|
||||
// // file/:{time.unix}/:{md5(cquery)}/:{fname} 1703006183//77792f3434343730363834382f3332306b.mp3
|
||||
// // file/:date/:second/:fname 20231219/1703006183/77792f3434343730363834382f3332306b.mp3
|
||||
// env.Cache.Set(`20211008/hello/test.mp3`, DynLink{Link: `/www/wwwroot/lx-source/data/cache/wy/3203127/320k.mp3`}, 0)
|
||||
|
||||
// if env.Config.Cache.LinkMode == `dynamic` || env.Config.Cache.LinkMode == `2` /*|| true*/ {
|
||||
// loger.Debug(`UseDynamic`)
|
||||
// return func(c *gin.Context) {
|
||||
// parms := util.ParaMap(c)
|
||||
// t, x, f := parms[`t`], parms[`x`], parms[`f`]
|
||||
// if clink, ok := env.Cache.Get(ztool.Str_FastConcat(t, `/`, x, `/`, f)); ok {
|
||||
// if dyn, ok := clink.(DynLink); ok {
|
||||
// if dyn.Mode == 0 {
|
||||
// c.File(ztool.Str_FastConcat(dyn.Link))
|
||||
// return
|
||||
// }
|
||||
// c.Redirect(http.StatusFound, dyn.Link)
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
// c.AbortWithStatus(http.StatusNotFound)
|
||||
// }
|
||||
// }
|
||||
// if cache, ok := caches.UseCache.(*localcache.Cache); ok {
|
||||
// loger.Debug(`UseStatic`)
|
||||
// return func(c *gin.Context) {
|
||||
// parms := util.ParaMap(c)
|
||||
// t, x, f := parms[`t`], parms[`x`], parms[`f`]
|
||||
// c.File(ztool.Str_FastConcat(cache.Path, `/`, t, `/`, x, `/`, f))
|
||||
// }
|
||||
// }
|
||||
// return func(c *gin.Context) {
|
||||
// c.AbortWithStatus(http.StatusNotFound)
|
||||
// }
|
||||
// }
|
13
src/middleware/util/util.go
Normal file
13
src/middleware/util/util.go
Normal file
@ -0,0 +1,13 @@
|
||||
package util
|
||||
|
||||
import "github.com/gin-gonic/gin"
|
||||
|
||||
// 将路由参数转为Map
|
||||
func ParaMap(c *gin.Context) map[string]string {
|
||||
parmlen := len(c.Params)
|
||||
parms := make(map[string]string, parmlen)
|
||||
for i := 0; i < parmlen; i++ {
|
||||
parms[c.Params[i].Key] = c.Params[i].Value
|
||||
}
|
||||
return parms
|
||||
}
|
@ -2,11 +2,12 @@ package router
|
||||
|
||||
import (
|
||||
"lx-source/src/caches"
|
||||
"lx-source/src/caches/localcache"
|
||||
"lx-source/src/env"
|
||||
"lx-source/src/middleware/auth"
|
||||
"lx-source/src/middleware/dynlink"
|
||||
"lx-source/src/middleware/loadpublic"
|
||||
"lx-source/src/middleware/resp"
|
||||
"lx-source/src/middleware/util"
|
||||
"lx-source/src/sources"
|
||||
"net/http"
|
||||
|
||||
@ -52,9 +53,11 @@ func InitRouter() *gin.Engine {
|
||||
// r.StaticFile(`/lx-custom-source.js`, `public/lx-custom-source.js`)
|
||||
// 解析接口
|
||||
r.GET(`/link/:s/:id/:q`, auth.AuthHandler, linkHandler)
|
||||
if cache, ok := caches.UseCache.(*localcache.Cache); ok {
|
||||
r.Static(`/file`, cache.Path)
|
||||
}
|
||||
dynlink.LoadHandler(r)
|
||||
// r.GET(`/file/:t/:x/:f`, dynlink.FileHandler())
|
||||
// if cache, ok := caches.UseCache.(*localcache.Cache); ok {
|
||||
// r.Static(`/file`, cache.Path)
|
||||
// }
|
||||
// if env.Config.Cache.Mode == `local` {
|
||||
// r.Static(`/file`, env.Config.Cache.Local_Path)
|
||||
// }
|
||||
@ -83,11 +86,12 @@ const (
|
||||
func linkHandler(c *gin.Context) {
|
||||
resp.Wrap(c, func() *resp.Resp {
|
||||
// 获取传入参数 检查合法性
|
||||
parmlen := len(c.Params)
|
||||
parms := make(map[string]string, parmlen)
|
||||
for i := 0; i < parmlen; i++ {
|
||||
parms[c.Params[i].Key] = c.Params[i].Value
|
||||
}
|
||||
// parmlen := len(c.Params)
|
||||
// parms := make(map[string]string, parmlen)
|
||||
// for i := 0; i < parmlen; i++ {
|
||||
// parms[c.Params[i].Key] = c.Params[i].Value
|
||||
// }
|
||||
parms := util.ParaMap(c)
|
||||
// getParam := func(p string) string { return strings.TrimSuffix(strings.TrimPrefix(c.Param(p), `/`), `/`) } //strings.Trim(c.Param(p), `/`)
|
||||
s := parms[`s`] //c.Param(`s`) //getParam(`s`) // source 平台 wy, mg, kw
|
||||
id := parms[`id`] //c.Param(`id`) //getParam(`id`) // sid 音乐ID wy: songmid, mg: copyrightId
|
||||
|
14
update.md
14
update.md
@ -1,12 +1,24 @@
|
||||
## Lx-Source/更新日志
|
||||
|
||||
#### 2023-12-(17-18) (beta)
|
||||
#### 2023-12-19 1.0.2-b0.3 (dev)
|
||||
+ 增加dev分支,日常开发,稳定了再合main,防止临时补充更新情况
|
||||
+ 上次补充更新内容:将error.mp3换成远程连接
|
||||
- 洛雪客户端似乎无法识别Base64编码后的音频文件
|
||||
- 待解决问题:无法获取真实请求URL,如套一层Nginx或分路径反代,只能依赖手动配置的 [Cache].Local_Bind 确定外部地址
|
||||
+ zTool:
|
||||
- 略微降低FileLogs缓存大小,防止异常退出丢**太多**日志情况 (TODO: Error及以上情况强制刷新缓冲区)
|
||||
- cmd: 优化io.Copy缓存问题
|
||||
+ (未完成) 临时链生成功能 (需要维护双倍的映射表,实际速度可能减慢)
|
||||
+ (实验性) [Main].SysLev 尝试调高程序优先级以解决windows下最小化降低资源分配问题
|
||||
|
||||
#### 2023-12-(17-18) 1.0.2-β0.2 (beta)
|
||||
+ 脚本增加请求耗时输出
|
||||
+ 优化zTool文件下载逻辑
|
||||
+ 链接缓存由Source上移至Router级 (为临时链实现基础)
|
||||
+ 完善缓存规则
|
||||
- 查询成功将链接写入内存,保留一小时 (MemCache HIT)
|
||||
- 解析错误将空字符串写入内存,阻止请求10分钟 (MemCache Reject)
|
||||
+ 可提升后续重复查询响应速度 (实际效果不明显,后端几十µs的差距)
|
||||
+ 防止自动换源机制瞎查,解析失败返回一段提示语音
|
||||
```
|
||||
非常抱歉,
|
||||
|
Loading…
x
Reference in New Issue
Block a user