改进cookie,去掉锁机制

This commit is contained in:
John
2018-08-27 23:00:47 +08:00
parent 75d9e312f3
commit a74c9c090c
3 changed files with 6 additions and 16 deletions

View File

@ -76,7 +76,6 @@ type Server struct {
statusHandlerMap map[string]HandlerFunc // 不同状态码下的注册处理方法(例如404状态时的处理方法)
// COOKIE
cookieMaxAge *gtype.Int // Cookie有效期
cookies *gmap.IntInterfaceMap // 当前服务器正在服务(请求正在执行)的Cookie(每个请求一个Cookie对象)
// SESSION
sessionMaxAge *gtype.Int // Session有效期
sessionIdName *gtype.String // SessionId名称
@ -189,7 +188,6 @@ func GetServer(name...interface{}) (*Server) {
serveCache : gcache.New(),
hooksCache : gcache.New(),
routesMap : make(map[string]string),
cookies : gmap.NewIntInterfaceMap(),
sessions : gcache.New(),
servedCount : gtype.NewInt(),
closeQueue : gqueue.New(),

View File

@ -37,19 +37,18 @@ type CookieItem struct {
// 获取或者创建一个cookie对象与传入的请求对应
func GetCookie(r *Request) *Cookie {
if v := r.Server.cookies.Get(r.Id); v != nil {
return v.(*Cookie)
if r.Cookie != nil {
return r.Cookie
}
c := &Cookie {
r.Cookie = &Cookie {
data : make(map[string]CookieItem),
domain : r.GetHost(),
server : r.Server,
request : r,
response : r.Response,
}
c.init()
r.Server.cookies.Set(r.Id, c)
return c
r.Cookie.init()
return r.Cookie
}
// 从请求流中初始化,无锁
@ -125,14 +124,10 @@ func (c *Cookie) Remove(key, domain, path string) {
c.SetCookie(key, "", domain, path, -86400)
}
// 请求完毕后删除已经存在的Cookie对象
func (c *Cookie) Close() {
c.server.cookies.Remove(c.request.Id)
}
// 输出到客户端
func (c *Cookie) Output() {
c.mu.RLock()
defer c.mu.RUnlock()
for k, v := range c.data {
// 只有expire != 0的才是服务端在本地请求中设置的cookie
if v.expire == 0 {
@ -150,5 +145,4 @@ func (c *Cookie) Output() {
},
)
}
c.mu.RUnlock()
}

View File

@ -198,8 +198,6 @@ func (s *Server) startCloseQueueLoop() {
if v := s.closeQueue.PopFront(); v != nil {
r := v.(*Request)
s.callHookHandler(HOOK_BEFORE_CLOSE, r)
// 关闭当前会话的Cookie
r.Cookie.Close()
// 更新Session会话超时时间
r.Session.UpdateExpire()
s.callHookHandler(HOOK_AFTER_CLOSE, r)