Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
B
beego
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
beego
Commits
be60f474
Commit
be60f474
authored
Dec 09, 2015
by
astaxie
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1455 from nkbai/develop
windows下静态文件映射找不到问题以及 grace init延后
parents
d1bba029
e8fe859a
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
42 additions
and
67 deletions
+42
-67
controller.go
controller.go
+24
-47
grace.go
grace/grace.go
+17
-15
router.go
router.go
+0
-4
staticfile.go
staticfile.go
+1
-1
No files found.
controller.go
View file @
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
View file @
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
View file @
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
View file @
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
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment