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 关闭)`)
|
env.Loger.NewGroup(`DebugMode`).Debug(`已开启调试模式, 将输出更详细日志 (配置文件中 [Main].Debug 改为 false 关闭)`)
|
||||||
}
|
}
|
||||||
genAuth()
|
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() {
|
func main() {
|
||||||
|
8
src/env/env.go
vendored
8
src/env/env.go
vendored
@ -9,7 +9,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Version = `1.0.2-β0.2`
|
Version = `1.0.2-β0.3`
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@ -29,6 +29,7 @@ type (
|
|||||||
Gzip bool `comment:"开启GZip (对已压缩的内容使用会产生反效果)"`
|
Gzip bool `comment:"开启GZip (对已压缩的内容使用会产生反效果)"`
|
||||||
LogPath string `comment:"文件日志路径,不填禁用"`
|
LogPath string `comment:"文件日志路径,不填禁用"`
|
||||||
Print bool `comment:"控制台输出"`
|
Print bool `comment:"控制台输出"`
|
||||||
|
SysLev bool `comment:"(实验性) 设置进程高优先级"`
|
||||||
}
|
}
|
||||||
Conf_Apis struct {
|
Conf_Apis struct {
|
||||||
// BindAddr string `comment:"外部访问地址,用于生成文件链接"`
|
// BindAddr string `comment:"外部访问地址,用于生成文件链接"`
|
||||||
@ -65,7 +66,8 @@ type (
|
|||||||
Force bool `comment:"强制推送更新" json:"force"`
|
Force bool `comment:"强制推送更新" json:"force"`
|
||||||
}
|
}
|
||||||
Conf_Cache struct {
|
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_Path string `comment:"本地缓存保存路径"`
|
||||||
Local_Bind string `comment:"本地缓存外部访问地址"`
|
Local_Bind string `comment:"本地缓存外部访问地址"`
|
||||||
@ -95,6 +97,7 @@ var (
|
|||||||
Gzip: false,
|
Gzip: false,
|
||||||
LogPath: `/data/logfile.log`,
|
LogPath: `/data/logfile.log`,
|
||||||
Print: true,
|
Print: true,
|
||||||
|
SysLev: false,
|
||||||
},
|
},
|
||||||
Apis: &Conf_Apis{
|
Apis: &Conf_Apis{
|
||||||
// BindAddr: `http://192.168.10.22:1011/`,
|
// BindAddr: `http://192.168.10.22:1011/`,
|
||||||
@ -123,6 +126,7 @@ var (
|
|||||||
},
|
},
|
||||||
Cache: &Conf_Cache{
|
Cache: &Conf_Cache{
|
||||||
Mode: `local`, // 缓存模式
|
Mode: `local`, // 缓存模式
|
||||||
|
LinkMode: `1`,
|
||||||
Local_Path: `data/cache`,
|
Local_Path: `data/cache`,
|
||||||
Local_Bind: `http://127.0.0.1:1011/`,
|
Local_Bind: `http://127.0.0.1:1011/`,
|
||||||
Cloud_Site: `https://cloudreveplus-demo.onrender.com/`,
|
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 (
|
import (
|
||||||
"lx-source/src/caches"
|
"lx-source/src/caches"
|
||||||
"lx-source/src/caches/localcache"
|
|
||||||
"lx-source/src/env"
|
"lx-source/src/env"
|
||||||
"lx-source/src/middleware/auth"
|
"lx-source/src/middleware/auth"
|
||||||
|
"lx-source/src/middleware/dynlink"
|
||||||
"lx-source/src/middleware/loadpublic"
|
"lx-source/src/middleware/loadpublic"
|
||||||
"lx-source/src/middleware/resp"
|
"lx-source/src/middleware/resp"
|
||||||
|
"lx-source/src/middleware/util"
|
||||||
"lx-source/src/sources"
|
"lx-source/src/sources"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
@ -52,9 +53,11 @@ func InitRouter() *gin.Engine {
|
|||||||
// r.StaticFile(`/lx-custom-source.js`, `public/lx-custom-source.js`)
|
// r.StaticFile(`/lx-custom-source.js`, `public/lx-custom-source.js`)
|
||||||
// 解析接口
|
// 解析接口
|
||||||
r.GET(`/link/:s/:id/:q`, auth.AuthHandler, linkHandler)
|
r.GET(`/link/:s/:id/:q`, auth.AuthHandler, linkHandler)
|
||||||
if cache, ok := caches.UseCache.(*localcache.Cache); ok {
|
dynlink.LoadHandler(r)
|
||||||
r.Static(`/file`, cache.Path)
|
// 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` {
|
// if env.Config.Cache.Mode == `local` {
|
||||||
// r.Static(`/file`, env.Config.Cache.Local_Path)
|
// r.Static(`/file`, env.Config.Cache.Local_Path)
|
||||||
// }
|
// }
|
||||||
@ -83,11 +86,12 @@ const (
|
|||||||
func linkHandler(c *gin.Context) {
|
func linkHandler(c *gin.Context) {
|
||||||
resp.Wrap(c, func() *resp.Resp {
|
resp.Wrap(c, func() *resp.Resp {
|
||||||
// 获取传入参数 检查合法性
|
// 获取传入参数 检查合法性
|
||||||
parmlen := len(c.Params)
|
// parmlen := len(c.Params)
|
||||||
parms := make(map[string]string, parmlen)
|
// parms := make(map[string]string, parmlen)
|
||||||
for i := 0; i < parmlen; i++ {
|
// for i := 0; i < parmlen; i++ {
|
||||||
parms[c.Params[i].Key] = c.Params[i].Value
|
// 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), `/`)
|
// 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
|
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
|
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/更新日志
|
## 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文件下载逻辑
|
+ 优化zTool文件下载逻辑
|
||||||
+ 链接缓存由Source上移至Router级 (为临时链实现基础)
|
+ 链接缓存由Source上移至Router级 (为临时链实现基础)
|
||||||
+ 完善缓存规则
|
+ 完善缓存规则
|
||||||
- 查询成功将链接写入内存,保留一小时 (MemCache HIT)
|
- 查询成功将链接写入内存,保留一小时 (MemCache HIT)
|
||||||
- 解析错误将空字符串写入内存,阻止请求10分钟 (MemCache Reject)
|
- 解析错误将空字符串写入内存,阻止请求10分钟 (MemCache Reject)
|
||||||
|
+ 可提升后续重复查询响应速度 (实际效果不明显,后端几十µs的差距)
|
||||||
+ 防止自动换源机制瞎查,解析失败返回一段提示语音
|
+ 防止自动换源机制瞎查,解析失败返回一段提示语音
|
||||||
```
|
```
|
||||||
非常抱歉,
|
非常抱歉,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user