修复ghttp.Server在windows下的重启失效问题;去掉gfile.IsExecutable方法

This commit is contained in:
John
2018-08-27 22:14:06 +08:00
parent 8de8cdad99
commit b69dd9d2c7
6 changed files with 20 additions and 34 deletions

11
TODO
View File

@ -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下的平滑重启失效问题

View File

@ -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)

View File

@ -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...)
})

View File

@ -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)

View File

@ -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)

View File

@ -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()
}