mirror of
https://gitee.com/johng/gf
synced 2026-06-26 17:35:40 +08:00
修复ghttp.Server在windows下的重启失效问题;去掉gfile.IsExecutable方法
This commit is contained in:
11
TODO
11
TODO
@ -10,17 +10,12 @@ ghttp.Response增加输出内容后自动退出当前请求机制,不需要用
|
||||
Cookie&Session数据池化处理;
|
||||
ghttp.Client增加proxy特性;
|
||||
gtime增加对时区转换的封装,并简化失去转换时对类似+80500时区的支持;
|
||||
ghttp获取参数支持直接转struct功能;
|
||||
map转struct增加对tag的支持;
|
||||
gcache检查在i386下的int64->int转换问题;
|
||||
gfsnotify增加对于目录的监控;
|
||||
orm增加sqlite对Save方法的支持(去掉触发器语句);
|
||||
ghttp.Server的Cookie及Session锁机制优化(去掉map锁机制);
|
||||
ghttp.Server增加Ip访问控制功能(DenyIps&AllowIps);
|
||||
ghttp路由功能增加分组路由特性;
|
||||
解决glog串日志情况;
|
||||
ghttp增加返回数据压缩机制;
|
||||
检查windows下的平滑重启失效问题;
|
||||
gview中的template标签失效问题;
|
||||
gfile文件stat信息使用gfsnotify进行缓存更新改进;
|
||||
ghttp.Server增加proxy功能特性,本地proxy和远程proxy,本地即将路由规则映射;远程即反向代理;
|
||||
@ -28,6 +23,7 @@ gjson对大json数据的解析效率问题;
|
||||
ghttp增加route name特性,并同时支持backend和template(提供内置函数)引用,可以通过RedirectRoute方法给定route name和路由参数跳转到指定的路由地址上;
|
||||
|
||||
|
||||
|
||||
DONE:
|
||||
1. gconv完善针对不同类型的判断,例如:尽量减少sprintf("%v", xxx)来执行string类型的转换;
|
||||
2. ghttp.Server请求执行中增加服务退出的方法,不再执行后续操作;
|
||||
@ -63,3 +59,8 @@ DONE:
|
||||
32. 增加文件缓存包,可根据fsnotify机制进行缓存更新;
|
||||
33. *any/:name路由匹配路由改进支持不带名字的*/:路由规则;
|
||||
34. ghttp静态文件服务改进(特别是403返回状态的修改);
|
||||
35. map转struct增加对tag的支持;
|
||||
36. gcache检查在i386下的int64->int转换问题;
|
||||
37. ghttp获取参数支持直接转struct功能;
|
||||
38. gfsnotify增加对于目录的监控;
|
||||
39. 检查windows下的平滑重启失效问题;
|
||||
@ -403,8 +403,8 @@ func (s *Server) startServer(fdMap listenerFdMap) {
|
||||
if err != nil && !strings.EqualFold(http.ErrServerClosed.Error(), err.Error()) {
|
||||
glog.Error(err)
|
||||
}
|
||||
// 如果所有异步的Server都已经停止,那么主Server就可以退出了
|
||||
if serverRunning.Val() < 1 {
|
||||
// 如果所有异步的Server都已经停止,并且没有在管理操作(重启/关闭)进行中,那么主Server就可以退出了
|
||||
if serverRunning.Val() < 1 && serverProcessStatus.Val() == 0 {
|
||||
doneChan <- struct{}{}
|
||||
}
|
||||
}(v)
|
||||
|
||||
@ -23,7 +23,6 @@ import (
|
||||
"time"
|
||||
"runtime"
|
||||
"bytes"
|
||||
"gitee.com/johng/gf/g/os/gfile"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -75,10 +74,6 @@ func (p *utilAdmin) Restart(r *Request) {
|
||||
if path == "" {
|
||||
path = os.Args[0]
|
||||
}
|
||||
if !gfile.IsExecutable(path) {
|
||||
r.Response.Writef("file '%s' is not executable", path)
|
||||
return
|
||||
}
|
||||
// 执行重启操作
|
||||
if len(path) > 0 {
|
||||
err = r.Server.Restart(path)
|
||||
@ -253,8 +248,8 @@ func restartWebServers(isSignal bool, newExeFilePath...string) error {
|
||||
forcedlyCloseWebServers()
|
||||
forkRestartProcess(newExeFilePath...)
|
||||
} else {
|
||||
// 非终端信号下,异步3秒后再执行重启,目的是让接口能够正确返回结果,否则接口会报错(因为web server关闭了)
|
||||
gtime.SetTimeout(3*time.Second, func() {
|
||||
// 非终端信号下,异步1秒后再执行重启,目的是让接口能够正确返回结果,否则接口会报错(因为web server关闭了)
|
||||
gtime.SetTimeout(time.Second, func() {
|
||||
forcedlyCloseWebServers()
|
||||
forkRestartProcess(newExeFilePath...)
|
||||
})
|
||||
|
||||
@ -61,6 +61,11 @@ func (s *Session) Set (k string, v interface{}) {
|
||||
s.data.Set(k, v)
|
||||
}
|
||||
|
||||
// 批量设置(BatchSet别名)
|
||||
func (s *Session) Sets (m map[string]interface{}) {
|
||||
s.BatchSet(m)
|
||||
}
|
||||
|
||||
// 批量设置
|
||||
func (s *Session) BatchSet (m map[string]interface{}) {
|
||||
s.data.BatchSet(m)
|
||||
|
||||
@ -285,20 +285,6 @@ func IsWritable(path string) bool {
|
||||
return result
|
||||
}
|
||||
|
||||
// 文件是否可执行
|
||||
func IsExecutable(path string) bool {
|
||||
info, err := os.Stat(path)
|
||||
if err != nil || info.IsDir() {
|
||||
return false
|
||||
}
|
||||
// 73: 000 001 001 001
|
||||
flag := info.Mode().Perm() & os.FileMode(73)
|
||||
if uint32(flag) == uint32(73) {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// 修改文件/目录权限
|
||||
func Chmod(path string, mode os.FileMode) error {
|
||||
return os.Chmod(path, mode)
|
||||
|
||||
@ -2,17 +2,16 @@ package main
|
||||
|
||||
import (
|
||||
"gitee.com/johng/gf/g"
|
||||
"gitee.com/johng/gf/g/net/ghttp"
|
||||
)
|
||||
|
||||
func main() {
|
||||
s := g.Server()
|
||||
s.EnableAdmin("/admin")
|
||||
s.BindHookHandler("/admin/*any", ghttp.HOOK_BEFORE_SERVE, func(r *ghttp.Request) {
|
||||
if !r.BasicAuth("admin", "123", "") {
|
||||
r.Exit()
|
||||
}
|
||||
})
|
||||
//s.BindHookHandler("/admin/*any", ghttp.HOOK_BEFORE_SERVE, func(r *ghttp.Request) {
|
||||
// if !r.BasicAuth("admin", "123", "") {
|
||||
// r.Exit()
|
||||
// }
|
||||
//})
|
||||
s.SetPort(8199)
|
||||
s.Run()
|
||||
}
|
||||
Reference in New Issue
Block a user