|
|
@ -4,6 +4,7 @@ import ( |
|
|
|
"context" |
|
|
|
"git.ouxuan.net/3136352472/go-service-template/jsruntime" |
|
|
|
"github.com/jolestar/go-commons-pool" |
|
|
|
"io/ioutil" |
|
|
|
"log" |
|
|
|
"time" |
|
|
|
) |
|
|
@ -20,13 +21,17 @@ type Config struct { |
|
|
|
|
|
|
|
var DefaultConfig Config |
|
|
|
|
|
|
|
var useSrc string |
|
|
|
|
|
|
|
func NewJsRuntimePool(mainScript string, useFileName string, staticPath string, relys jsruntime.Relys, mode jsruntime.RunMode) (jrp *JsRuntimePool) { |
|
|
|
jrp = &JsRuntimePool{} |
|
|
|
|
|
|
|
factory := pool.NewPooledObjectFactorySimple( |
|
|
|
func(context.Context) (interface{}, error) { |
|
|
|
render, err := jsruntime.NewJsRuntime(mainScript, useFileName, staticPath, relys, mode) |
|
|
|
|
|
|
|
render, err := jsruntime.NewJsRuntime(mainScript, staticPath, relys, mode) |
|
|
|
render.UseSrcFun = func() string { |
|
|
|
return useSrc |
|
|
|
} |
|
|
|
return render, err |
|
|
|
}) |
|
|
|
|
|
|
@ -51,13 +56,34 @@ func NewJsRuntimePool(mainScript string, useFileName string, staticPath string, |
|
|
|
jrp.jsRuntimePool.Config.MaxTotal = DefaultConfig.MaxTotal |
|
|
|
jrp.jsRuntimePool.Config.BlockWhenExhausted = true |
|
|
|
|
|
|
|
go func() { |
|
|
|
var preparePoolTask func() |
|
|
|
preparePoolTask = func() { |
|
|
|
defer func() { |
|
|
|
recover() |
|
|
|
time.Sleep(time.Second) |
|
|
|
preparePoolTask() |
|
|
|
}() |
|
|
|
for { |
|
|
|
|
|
|
|
jrp.jsRuntimePool.PreparePool(jrp.ctx) |
|
|
|
time.Sleep(time.Second / 5) |
|
|
|
} |
|
|
|
}() |
|
|
|
} |
|
|
|
go preparePoolTask() |
|
|
|
|
|
|
|
var useSrcTask func() |
|
|
|
useSrcTask = func() { |
|
|
|
defer func() { |
|
|
|
recover() |
|
|
|
time.Sleep(time.Second) |
|
|
|
useSrcTask() |
|
|
|
}() |
|
|
|
for { |
|
|
|
raw, _ := ioutil.ReadFile(useFileName) |
|
|
|
useSrc = string(raw) |
|
|
|
time.Sleep(time.Second) |
|
|
|
} |
|
|
|
} |
|
|
|
go useSrcTask() |
|
|
|
|
|
|
|
return |
|
|
|
} |
|
|
|