Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
二次元的罪恶王冠
beego
提交
be60f474
B
beego
项目概览
二次元的罪恶王冠
/
beego
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
B
beego
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
be60f474
编写于
12月 09, 2015
作者:
A
astaxie
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #1455 from nkbai/develop
windows下静态文件映射找不到问题以及 grace init延后
上级
d1bba029
e8fe859a
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
42 addition
and
67 deletion
+42
-67
controller.go
controller.go
+24
-47
grace/grace.go
grace/grace.go
+17
-15
router.go
router.go
+0
-4
staticfile.go
staticfile.go
+1
-1
未找到文件。
controller.go
浏览文件 @
be60f474
...
...
@@ -413,91 +413,68 @@ func (c *Controller) GetStrings(key string, def ...[]string) []string {
// GetInt returns input as an int or the default value while it's present and input is blank
func
(
c
*
Controller
)
GetInt
(
key
string
,
def
...
int
)
(
int
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
return
strconv
.
Atoi
(
strv
)
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
return
strconv
.
Atoi
(
strv
)
}
return
strconv
.
Atoi
(
strv
)
}
// GetInt8 return input as an int8 or the default value while it's present and input is blank
func
(
c
*
Controller
)
GetInt8
(
key
string
,
def
...
int8
)
(
int8
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
8
)
i8
:=
int8
(
i64
)
return
i8
,
err
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
8
)
i8
:=
int8
(
i64
)
return
i8
,
err
}
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
8
)
return
int8
(
i64
),
err
}
// GetInt16 returns input as an int16 or the default value while it's present and input is blank
func
(
c
*
Controller
)
GetInt16
(
key
string
,
def
...
int16
)
(
int16
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
16
)
i16
:=
int16
(
i64
)
return
i16
,
err
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
16
)
i16
:=
int16
(
i64
)
return
i16
,
err
}
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
16
)
return
int16
(
i64
),
err
}
// GetInt32 returns input as an int32 or the default value while it's present and input is blank
func
(
c
*
Controller
)
GetInt32
(
key
string
,
def
...
int32
)
(
int32
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
i64
,
err
:=
strconv
.
ParseInt
(
c
.
Ctx
.
Input
.
Query
(
key
),
10
,
32
)
i32
:=
int32
(
i64
)
return
i32
,
err
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
i64
,
err
:=
strconv
.
ParseInt
(
c
.
Ctx
.
Input
.
Query
(
key
),
10
,
32
)
i32
:=
int32
(
i64
)
return
i32
,
err
}
i64
,
err
:=
strconv
.
ParseInt
(
strv
,
10
,
32
)
return
int32
(
i64
),
err
}
// GetInt64 returns input value as int64 or the default value while it's present and input is blank.
func
(
c
*
Controller
)
GetInt64
(
key
string
,
def
...
int64
)
(
int64
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
return
strconv
.
ParseInt
(
strv
,
10
,
64
)
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
return
strconv
.
ParseInt
(
strv
,
10
,
64
)
}
return
strconv
.
ParseInt
(
strv
,
10
,
64
)
}
// GetBool returns input value as bool or the default value while it's present and input is blank.
func
(
c
*
Controller
)
GetBool
(
key
string
,
def
...
bool
)
(
bool
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
return
strconv
.
ParseBool
(
strv
)
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
return
strconv
.
ParseBool
(
strv
)
}
return
strconv
.
ParseBool
(
strv
)
}
// GetFloat returns input value as float64 or the default value while it's present and input is blank.
func
(
c
*
Controller
)
GetFloat
(
key
string
,
def
...
float64
)
(
float64
,
error
)
{
if
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
);
strv
!=
""
{
return
strconv
.
ParseFloat
(
strv
,
64
)
}
else
if
len
(
def
)
>
0
{
strv
:=
c
.
Ctx
.
Input
.
Query
(
key
)
if
len
(
strv
)
==
0
&&
len
(
def
)
>
0
{
return
def
[
0
],
nil
}
else
{
return
strconv
.
ParseFloat
(
strv
,
64
)
}
return
strconv
.
ParseFloat
(
strv
,
64
)
}
// GetFile returns the file data in file upload field named as key.
...
...
grace/grace.go
浏览文件 @
be60f474
...
...
@@ -53,18 +53,18 @@ import (
)
const
(
// PreSignal is the position to add filter before signal
// PreSignal is the position to add filter before signal
PreSignal
=
iota
// PostSignal is the position to add filter after signal
// PostSignal is the position to add filter after signal
PostSignal
// StateInit represent the application inited
// StateInit represent the application inited
StateInit
// StateRunning represent the application is running
// StateRunning represent the application is running
StateRunning
// StateShuttingDown represent the application is shutting down
// StateShuttingDown represent the application is shutting down
StateShuttingDown
// StateTerminate represent the application is killed
// StateTerminate represent the application is killed
StateTerminate
)
...
...
@@ -75,34 +75,36 @@ var (
socketPtrOffsetMap
map
[
string
]
uint
runningServersForked
bool
// DefaultReadTimeOut is the HTTP read timeout
// DefaultReadTimeOut is the HTTP read timeout
DefaultReadTimeOut
time
.
Duration
// DefaultWriteTimeOut is the HTTP Write timeout
// DefaultWriteTimeOut is the HTTP Write timeout
DefaultWriteTimeOut
time
.
Duration
// DefaultMaxHeaderBytes is the Max HTTP Herder size, default is 0, no limit
// DefaultMaxHeaderBytes is the Max HTTP Herder size, default is 0, no limit
DefaultMaxHeaderBytes
int
// DefaultTimeout is the shutdown server's timeout. default is 60s
// DefaultTimeout is the shutdown server's timeout. default is 60s
DefaultTimeout
time
.
Duration
isChild
bool
isChild
bool
socketOrder
string
once
sync
.
Once
)
func
init
()
{
DefaultMaxHeaderBytes
=
0
DefaultTimeout
=
60
*
time
.
Second
}
func
onceInit
()
{
regLock
=
&
sync
.
Mutex
{}
flag
.
BoolVar
(
&
isChild
,
"graceful"
,
false
,
"listen on open fd (after forking)"
)
flag
.
StringVar
(
&
socketOrder
,
"socketorder"
,
""
,
"previous initialization order - used when more than one listener was started"
)
runningServers
=
make
(
map
[
string
]
*
Server
)
runningServersOrder
=
[]
string
{}
socketPtrOffsetMap
=
make
(
map
[
string
]
uint
)
DefaultMaxHeaderBytes
=
0
DefaultTimeout
=
60
*
time
.
Second
}
// NewServer returns a new graceServer.
func
NewServer
(
addr
string
,
handler
http
.
Handler
)
(
srv
*
Server
)
{
once
.
Do
(
onceInit
)
regLock
.
Lock
()
defer
regLock
.
Unlock
()
if
!
flag
.
Parsed
()
{
...
...
router.go
浏览文件 @
be60f474
...
...
@@ -897,10 +897,6 @@ type responseWriter struct {
status
int
}
// Header returns the header map that will be sent by WriteHeader.
func
(
w
*
responseWriter
)
Header
()
http
.
Header
{
return
w
.
ResponseWriter
.
Header
()
}
// Write writes the data to the connection as part of an HTTP reply,
// and sets `started` to true.
...
...
staticfile.go
浏览文件 @
be60f474
...
...
@@ -144,7 +144,7 @@ func isStaticCompress(filePath string) bool {
// searchFile search the file by url path
// if none the static file prefix matches ,return notStaticRequestErr
func
searchFile
(
ctx
*
context
.
Context
)
(
string
,
os
.
FileInfo
,
error
)
{
requestPath
:=
filepath
.
Clean
(
ctx
.
Input
.
Request
.
URL
.
Path
)
requestPath
:=
filepath
.
ToSlash
(
filepath
.
Clean
(
ctx
.
Input
.
Request
.
URL
.
Path
)
)
// special processing : favicon.ico/robots.txt can be in any static dir
if
requestPath
==
"/favicon.ico"
||
requestPath
==
"/robots.txt"
{
file
:=
path
.
Join
(
"."
,
requestPath
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录