精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入理解Go標(biāo)準(zhǔn)庫-http server的優(yōu)雅關(guān)閉

開發(fā) 前端
優(yōu)雅關(guān)閉(graceful shutdown)指的是我們的HTTP Server關(guān)閉前既拒絕新來的請求,又正確的處理完正在進行中的請求,隨后進程退出。如何實現(xiàn)?

還記得怎么啟動一個HTTP Server么?

package main

import (
 "net"
 "net/http"
)

func main() {
 // 方式1
 err := http.ListenAndServe(":8080", nil)
 if err != nil {
   panic(err)
 }
    
 // 方式2
 // server := &http.Server{Addr: ":8080"}
 // err := server.ListenAndServe()
 // if err != nil {
 //  panic(err)
 // }
}

ListenAndServe在不出錯的情況下,會一直阻塞在這個位置,如何停止這樣的一個HTTP Server呢?

CTRL+C是結(jié)束一個進程常用的方式,它和kill pid或者kill -l 15 pid命令本質(zhì)上沒有任何區(qū)別,他們都是向進程發(fā)送了SIGTERM信號。因為程序沒有設(shè)置對SIGTERM信號的處理程序,所以系統(tǒng)默認(rèn)的信號處理程序結(jié)束了我們的進程

這會帶來什么問題?

在服務(wù)器的進程被殺死時,我們的服務(wù)器可能正在處理請求并未完成。因此對于客戶端產(chǎn)生了一個預(yù)期外的錯誤

curl -v --max-time 4 127.0.0.1:8009/foo

* Connection #0 to host 127.0.0.1 left intact
*   Trying 127.0.0.1:8009...
* Connected to 127.0.0.1 (127.0.0.1) port 8009 (#0)
> GET /foo HTTP/1.1
> Host: 127.0.0.1:8009
> User-Agent: curl/7.86.0
> Accept: */*
> 

* Empty reply from server
* Closing connection 0
curl: (52) Empty reply from server

如果有nginx代理,因為upstream的中斷,nginx會產(chǎn)生502的響應(yīng)

curl -v --max-time 11 127.0.0.1:8010/foo
*   Trying 127.0.0.1:8010...
* Connected to 127.0.0.1 (127.0.0.1) port 8010 (#0)
> GET /foo HTTP/1.1
> Host: 127.0.0.1:8010
> User-Agent: curl/7.86.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 502 Bad Gateway
< Server: nginx/1.25.3
< Date: Sat, 02 Dec 2023 10:14:33 GMT
< Content-Type: text/html
< Content-Length: 497
< Connection: keep-alive
< ETag: "6537cac7-1f1"

優(yōu)雅關(guān)閉的初步實現(xiàn)

優(yōu)雅關(guān)閉(graceful shutdown)指的是我們的HTTP Server關(guān)閉前既拒絕新來的請求,又正確的處理完正在進行中的請求,隨后進程退出。如何實現(xiàn)?

?? 異步啟動HTTP server

因為ListenAndServe會阻塞goroutine,如果還需要讓代碼繼續(xù)執(zhí)行,我們需要把它放到一個異步的goroutine中

go func() {
    if err := srv.ListenAndServe(); err != nil {
        panic(err)
    }
}()

?? 第二步:設(shè)置SIGTERM信號處理程序

操作系統(tǒng)默認(rèn)的信號處理程序是直接結(jié)束進程,因此要實現(xiàn)graceful shutdown,要設(shè)置程序自己的信號處理程序。

Go中可以使用如下的方式來處理信號

  • signal.Notify來設(shè)置我們要監(jiān)聽的信號,一旦有程序設(shè)定的信號發(fā)生時,信號會被寫入channel中
  • signalCh chan os.Signal我們定義的是一個帶緩沖的channel,當(dāng)channel中沒有數(shù)據(jù)時讀操作會阻塞
signalCh := make(chan os.Signal, 1)
signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM)

sig := <-signalCh
log.Printf("Received signal: %v\n", sig)

?? 第三步:平滑的關(guān)閉HTTP Server

在自定義的信號處理程序中處理什么呢?

1、首先需要關(guān)閉端口的監(jiān)聽,此時新的請求就無法建立連接

2、對空閑的連接進行關(guān)閉

3、對進行中的連接等待處理完成,變成空閑連接后進行關(guān)閉

在Go 1.8以前實現(xiàn)上述操作需要編寫大量的代碼,也有一些第三方的庫(tylerstillwate/graceful、facebookarchive/grace等)可供使用。但Go1.8之后標(biāo)準(zhǔn)庫提供了 Shutdown()方法

?? 實現(xiàn):綜合上面三步有如下實現(xiàn)

func main() {
 mx := http.NewServeMux()
 mx.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
  time.Sleep(time.Duration(rand.Intn(10)) * time.Second)
  w.Write([]byte("Receive path foo\n"))
 })

 srv := http.Server{
  Addr:    ":8009",
  Handler: mx,
 }

 go func() {
  if err := srv.ListenAndServe(); err != nil {
   panic(err)
  }
 }()

 signalCh := make(chan os.Signal, 1)
 signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM)

 sig := <-signalCh
 log.Printf("Received signal: %v\n", sig)

 if err := srv.Shutdown(context.Background()); err != nil {
  log.Fatalf("Server shutdown failed: %v\n", err)
 }

 log.Println("Server shutdown gracefully")
}

沒有收到SIGINT、SIGTERM信號前,main goroutine被signalCh的讀阻塞

一旦收到信號,signalCh的阻塞被解除會往下執(zhí)行server的Shutdown(),Shutdown()函數(shù)會處理好活躍和非活躍的連接,并返回結(jié)果

上述代碼有什么問題么?

優(yōu)雅關(guān)閉實現(xiàn)的細(xì)節(jié)

?? 當(dāng)Shutdown被調(diào)用時ListenAndServe會立刻返回http.ErrServerClosed的錯誤

go func() {
    if err := srv.ListenAndServe(); err != nil {
        panic(err)
    }
}()

對于上文的代碼,Shutdown()剛被調(diào)用,ListenAndServe所在的goroutine就拋出了panic,因而也導(dǎo)致main goroutine被退出,并沒有達到運行Shutdown()預(yù)期的效果

如果依舊想對ListenAndServe的錯誤拋出painc,需要忽略http.ErrServerClosed的錯誤

go func() {
    err := srv.ListenAndServe()
    if err != nil && err != http.ErrServerClosed {
        panic(err)
    }
}()

?? 在有限的時間內(nèi)關(guān)閉服務(wù)器

優(yōu)雅關(guān)閉過程中會等待進行中的請求完成。但請求處理的過程可能非常耗時,或者請求本身已經(jīng)陷入了無法結(jié)束的狀態(tài),我們不可能無限的等待下去,因此設(shè)定一個關(guān)閉的上限時間會更穩(wěn)妥。

Shutdown()接受一個context.Context類型的參數(shù),我們可以用來設(shè)定超時時間

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

if err := srv.Shutdown(ctx); err != nil {
    log.Fatalf("Server shutdown failed: %v\n", err)
}

log.Println("Server shutdown gracefully")

通過ctx.Done()可以區(qū)分是否因為超時導(dǎo)致的服務(wù)器關(guān)閉,因而可以對不同的退出原因進行區(qū)分

ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()

if err := srv.Shutdown(ctx); err != nil {
    select {
        case <-ctx.Done():
        // 由于達到超時時間服務(wù)器關(guān)閉,未完成優(yōu)雅關(guān)閉
        log.Println("timeout of 5 seconds.")
        default:
        // 其他原因?qū)е碌姆?wù)關(guān)閉異常,未完成優(yōu)雅關(guān)閉
        log.Fatalf("Server shutdown failed: %v\n", err)
    }
    return
}

// 正確執(zhí)行優(yōu)雅關(guān)閉服務(wù)器
log.Println("Server shutdown gracefully")

?? 釋放其他資源

除了顯式的釋放資源,main goroutine也有必要通知其他goroutine進程即將退出,做必要的處理

例如,我們的服務(wù)在啟動后會向服務(wù)中心進行注冊,之后異步定時上報自身狀態(tài)。

為了讓注冊中心第一時間感知到服務(wù)已下線,需要主動注銷服務(wù)。在注銷服務(wù)前,需要先暫停異步的定時上報

context.Context讓我們可以很輕松的做到這件事

ctx, cancel := context.WithCancel(context.Background())
defer func() {
    cancel()
}()

// 需要在服務(wù)啟動后才在注冊中心注冊
go func() {
    tc := time.NewTicker(5 * time.Second)
    for {
        select {
            case <-tc.C:
            // 上報狀態(tài)
            log.Println("status update success")
            case <-ctx.Done():
            // server closed, return
            tc.Stop()
            log.Println("stop update success")
            return
        }
    }
}()

示例倉庫中還有一個更復(fù)雜的利用context.Context退出子goroutine的例子

?? 全貌

結(jié)合上面的所有的細(xì)節(jié),一個優(yōu)雅關(guān)閉的http server代碼如下

func registerService(ctx context.Context) {
 tc := time.NewTicker(5 * time.Second)
 for {
  select {
  case <-tc.C:
   // 上報狀態(tài)
   log.Println("status update success")
  case <-ctx.Done():
   tc.Stop()
   log.Println("stop update success")
   return
  }
 }
}

func destroyService() {
 log.Println("destroy success")
}

func gracefulShutdown() {
 mainCtx, mainCancel := context.WithCancel(context.Background())
 // 用ctx初始化資源,mysql,redis等
 // ...

 defer func() {
  mainCancel()
  // 主動注銷服務(wù)
  destroyService()

  // 清理資源,mysql,redis等
  // ...
 }()

 mx := http.NewServeMux()
 mx.HandleFunc("/foo", func(w http.ResponseWriter, r *http.Request) {
  time.Sleep(time.Duration(rand.Intn(10)) * time.Second)
  w.Write([]byte("Receive path foo\n"))
 })

 srv := http.Server{
  Addr:    ":8009",
  Handler: mx,
 }

 // ListenAndServe也會阻塞,需要把它放到一個goroutine中
 go func() {
  if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
   panic(err)
  }
 }()

 // 需要在服務(wù)啟動后才在注冊中心注冊
 go registerService(mainCtx)

 signalCh := make(chan os.Signal, 1)
 signal.Notify(signalCh, syscall.SIGINT, syscall.SIGTERM)

 // 等待信號
 sig := <-signalCh
 log.Printf("Received signal: %v\n", sig)

 ctxTimeout, cancelTimeout := context.WithTimeout(context.Background(), 5*time.Second)
 defer cancelTimeout()

 if err := srv.Shutdown(ctxTimeout); err != nil {
  select {
  case <-ctxTimeout.Done():
   // 由于達到超時時間服務(wù)器關(guān)閉,未完成優(yōu)雅關(guān)閉
   log.Println("timeout of 5 seconds.")
  default:
   // 其他原因?qū)е碌姆?wù)關(guān)閉異常,未完成優(yōu)雅關(guān)閉
   log.Fatalf("Server shutdown failed: %v\n", err)
  }
  return
 }

 // 正確執(zhí)行優(yōu)雅關(guān)閉服務(wù)器
 log.Println("Server shutdown gracefully")
}

責(zé)任編輯:武曉燕 來源: 涼涼的知識庫
相關(guān)推薦

2023-11-01 08:41:24

Go標(biāo)準(zhǔn)庫http

2021-10-16 17:53:35

Go函數(shù)編程

2022-07-13 14:12:41

HTTP/3前端

2015-03-17 09:44:08

2023-10-27 11:27:14

Go函數(shù)

2025-01-13 13:00:00

Go網(wǎng)絡(luò)框架nbio

2019-08-19 12:50:00

Go垃圾回收前端

2024-12-16 08:01:23

Python場景解鎖

2016-12-08 15:36:59

HashMap數(shù)據(jù)結(jié)構(gòu)hash函數(shù)

2020-07-21 08:26:08

SpringSecurity過濾器

2010-06-01 15:25:27

JavaCLASSPATH

2024-10-15 15:58:11

2024-04-07 00:04:00

Go語言Map

2012-11-22 10:11:16

LispLisp教程

2021-12-28 17:39:05

Go精度Json

2019-12-06 09:44:27

HTTP數(shù)據(jù)安全

2022-11-07 18:12:54

Go語言函數(shù)

2009-09-25 09:14:35

Hibernate日志

2021-02-17 11:25:33

前端JavaScriptthis

2023-10-19 11:12:15

Netty代碼
點贊
收藏

51CTO技術(shù)棧公眾號

中文字幕a在线观看| 成人黄色片免费| 久久久蜜桃一区二区| 成人写真视频| 欧美不卡在线视频| 欧美激情精品久久久久久小说| 欧美69xxx| 不卡的av在线| 国产乱肥老妇国产一区二| 国产精品久久久久久久精| 亚欧洲精品视频在线观看| 欧美日韩精品一区二区三区| 日韩网站在线免费观看| 91大神xh98hx在线播放| 国产成人av电影免费在线观看| 欧洲亚洲免费视频| 草视频在线观看| 天海翼精品一区二区三区| 欧美美女激情18p| 国产免费一区二区三区视频| 18+视频在线观看| 国产午夜亚洲精品羞羞网站| 国产一区二区三区无遮挡| 中文字幕二区三区| 国产亚洲毛片在线| 久久视频在线播放| 欧美巨胸大乳hitomi| 日韩深夜福利| 欧美成人乱码一区二区三区| 午夜在线观看av| 中文字幕在线免费观看视频| 一区二区欧美国产| 亚洲免费av网| 日本视频在线| 国产精品丝袜在线| 欧美日韩国产免费一区二区三区| 国内爆初菊对白视频| 国产一区二区三区在线观看免费视频| 国产精品6699| 国产成人无码av| 999在线观看精品免费不卡网站| 欧美另类交人妖| 国产老头老太做爰视频| 日韩高清欧美| 一区二区三欧美| 国产aⅴ激情无码久久久无码| 青青久久av| 亚洲第一精品福利| 欧美日韩人妻精品一区在线| 亚洲网一区二区三区| 91精品国产91热久久久做人人| 亚洲一级片网站| 国产第一精品| 欧美午夜精品免费| 亚洲免费av一区二区三区| 在线日本欧美| 欧美性xxxxx极品少妇| 久久久精品麻豆| 国产综合色激情| 欧美日韩激情一区二区三区| 182午夜在线观看| 日韩欧国产精品一区综合无码| 欧美男男青年gay1069videost| 一本久道中文无码字幕av| 免费观看一级欧美片| 91久久久免费一区二区| 午夜国产一区二区三区| 欧洲精品久久久久毛片完整版| 欧美日韩国产另类不卡| 中文字幕一区二区在线观看视频| 国产精品久久久久久久久久辛辛 | 国产精品美乳在线观看| 亚洲av综合一区| 久久99久久精品欧美| 亚洲sss综合天堂久久| 精品久久在线观看| 99视频超级精品| 色姑娘综合网| 91最新在线视频| 五月天中文字幕一区二区| 欧美 国产 日本| 国产乱子精品一区二区在线观看| 欧美一卡二卡在线| 玖草视频在线观看| 日韩一区二区在线| 欧美激情一级精品国产| 成人av网站在线播放| 九色综合狠狠综合久久| 国产在线精品二区| aaa日本高清在线播放免费观看| 亚洲免费观看在线视频| koreanbj精品视频一区| 激情久久99| 在线播放91灌醉迷j高跟美女| www.四虎精品| 成人a'v在线播放| 欧美精品久久久久a| 成人毛片一区二区三区| 国产精品亚洲一区二区三区在线 | 国产亚洲色婷婷久久| 欧美人妖在线观看| 久久久极品av| 中文字幕在线播| 成人在线视频一区二区| 欧洲亚洲一区二区| 久草在线资源站资源站| 欧美日韩免费观看一区三区| av网页在线观看| 国产精品久久久久久久久久10秀 | 久久精品国产精品亚洲毛片| 日韩av综合网| 久久一级黄色片| 久久99精品久久久久婷婷| 久久av免费一区| 伊人精品影院| 欧美日韩三级视频| 人妻少妇无码精品视频区| 国内揄拍国内精品久久| 国产又爽又黄的激情精品视频| 四虎精品成人免费网站| 亚洲一区二区视频| 国产又粗又长又爽又黄的视频| 国产一区二区三区天码| 性欧美激情精品| 亚洲欧美另类综合| 亚洲精品乱码久久久久久黑人| 亚欧在线免费观看| 神马午夜久久| 欧美伊久线香蕉线新在线| 亚洲黄色在线观看视频| 亚洲欧美偷拍卡通变态| 最新天堂在线视频| av亚洲在线观看| 日本亚洲欧美三级| 日本大片在线观看| 黑人巨大精品欧美一区二区三区| 亚洲成人av免费观看| 久久精品免费一区二区三区| 国产精品亚洲网站| 草碰在线视频| 在线观看不卡一区| 欧美另类z0zx974| 三级精品在线观看| 日韩啊v在线| 欧美影视资讯| 最近2019年日本中文免费字幕| 青青国产在线视频| 中国av一区二区三区| 9久久婷婷国产综合精品性色| 国产在线日韩精品| 国产精品日韩专区| 男女啪啪在线观看| 91精品国产欧美一区二区| 在线看的片片片免费| 国产精品自在在线| 国产免费黄色一级片| 国产一区在线电影| 欧美一级视频一区二区| 青青草视频在线免费观看| 色婷婷综合中文久久一本| 亚洲午夜久久久久久久国产| 强制捆绑调教一区二区| 亚洲巨乳在线观看| 精品国产亚洲一区二区三区| 久久99国产综合精品女同 | 在线激情影院一区| 亚洲一区二区三区网站| 亚洲精品老司机| 美女搡bbb又爽又猛又黄www| 国产一区成人| 亚洲免费视频一区| 亚洲国产欧美国产第一区| 久久久噜噜噜久久久| 午夜影院免费视频| 精品视频1区2区| 欧美日韩在线视频免费播放| 成人毛片老司机大片| 欧美日韩中文在线视频| 国产精品久久占久久| 国产精品久久亚洲7777| 成人爽a毛片免费啪啪| 日韩在线观看免费| 日本免费不卡视频| 欧美日韩视频在线观看一区二区三区| 久久中文免费视频| 2017欧美狠狠色| 午夜精品免费看| 国产精品久久久免费| 一区二区三区四区五区精品 | 天堂资源在线亚洲资源| 久久伦理中文字幕| 国产97在线播放| 手机av在线播放| 一区二区三区www| www夜片内射视频日韩精品成人| 欧美日韩国产精品专区 | 午夜欧美在线一二页| 无码人妻aⅴ一区二区三区69岛| 国产一区二区三区四| 国产一区二区三区精彩视频 | 欧美黄色片视频| 第一福利在线| 欧美精品一区二区三区在线播放| 国产免费www| 亚洲大片免费看| 国产中文av在线| 久久久亚洲午夜电影| 人妻av一区二区三区| 蜜臀av一级做a爰片久久| 黄网站欧美内射| 在线中文一区| 一区二区在线观看网站| 亚洲精品播放| 国产精品免费在线| 国产成人久久精品一区二区三区| 日韩av电影国产| 大桥未久在线视频| 欧美黑人性生活视频| 久久国产精品一区| 国产性猛交xxxx免费看久久| 蜜臀av在线观看| 欧美成人vr18sexvr| 亚洲资源在线播放| 色哟哟在线观看一区二区三区| 久久精品视频8| 伊人一区二区三区| 欧美性x x x| 国产精品麻豆网站| www久久久久久久| 久久婷婷国产综合精品青草| 日韩精品人妻中文字幕有码| 国产精品99久久久久| 欧美国产在线一区| 韩国理伦片一区二区三区在线播放| 成人免费视频久久| 久久香蕉精品| 美女黄色片视频| 日韩中文字幕1| 日韩视频在线免费看| 香蕉久久a毛片| 国产最新免费视频| 国产精品色网| 国产亚洲欧美在线视频| 中文日韩欧美| 欧美日韩亚洲一| 国产一级一区二区| 精品www久久久久奶水| 日韩中文字幕91| 手机在线成人免费视频| 久久精品国产99国产精品| 亚欧美在线观看| 久久精品国产999大香线蕉| 亚洲 国产 图片| 韩国成人福利片在线播放| 亚洲一区二区三区三州| 丁香亚洲综合激情啪啪综合| 中文字幕第3页| 久久欧美一区二区| 少妇太紧太爽又黄又硬又爽小说| 中文字幕免费在线观看视频一区| 国产精品麻豆免费版现看视频| 亚洲视频图片小说| 九九视频免费在线观看| 性感美女久久精品| 亚洲欧美一二三区| 欧美群妇大交群中文字幕| 国产精品丝袜黑色高跟鞋| 日韩精品一区二区三区在线观看| 日韩永久免费视频| 亚洲欧美国产制服动漫| 日本在线观看www| 色综合视频网站| 天堂中文在线播放| 国产精品美乳一区二区免费| 欧美一级大片在线视频| 国产精品三区四区| 国产一区二区欧美| 国产盗摄视频在线观看| 中文欧美日韩| 亚洲欧美日本一区二区| 粉嫩一区二区三区性色av| 大又大又粗又硬又爽少妇毛片| 国产精品久久看| 久久久久久久中文字幕| 色综合一区二区| 99产精品成人啪免费网站| 日韩成人在线视频| 日本在线免费播放| 97免费中文视频在线观看| 51一区二区三区| 国产一区二区三区黄| 色777狠狠狠综合伊人| 久操手机在线视频| 免费精品视频在线| 99久久人妻精品免费二区| 中文成人av在线| 国产精品人人人人| 欧美一级黄色大片| 国产黄色片在线观看| 欧美精品999| 日本一区二区三区中文字幕| 激情视频一区二区| 亚洲国产精品综合久久久| 精品一卡二卡三卡| 国产精品1024| 麻豆视频免费在线播放| 亚洲va欧美va国产va天堂影院| 一级黄色免费看| 亚洲精品一区久久久久久| 伊人影院在线视频| 国产欧美日韩视频| 狠狠操综合网| 免费成人午夜视频| 国产大片一区二区| 日韩三级久久久| 欧美中文一区二区三区| 亚洲av成人无码网天堂| 九九久久精品一区| 日日夜夜亚洲| 少妇精品久久久久久久久久| 国产美女一区| a天堂视频在线观看| 一区二区三区高清| av中文字幕免费在线观看| 最近2019年手机中文字幕| 在线看欧美视频| 日本免费高清一区| 国产色综合网| 国产网站无遮挡| 五月激情六月综合| 香蕉视频成人在线| 97人人爽人人喊人人模波多| aiai久久| 精品无码国产一区二区三区av| 国产一区中文字幕| 希岛爱理中文字幕| 欧美精品日韩一区| 久草中文在线| 91网在线免费观看| 91综合视频| 日韩av片免费观看| 亚洲免费在线电影| 亚洲第一视频在线播放| 欧美极品在线播放| jazzjazz国产精品久久| 岛国大片在线播放| 91香蕉视频mp4| 9i精品福利一区二区三区| 亚洲天堂av在线免费观看| 久九九久频精品短视频| 欧美日韩日本网| 日韩av不卡一区二区| 在线免费看视频| 欧美日韩国产一级| 黄色片网站在线| 99免费在线观看视频| 一区二区黄色| 亚洲最大成人网站| 欧亚一区二区三区| 国产在线观看免费麻豆| av在线不卡观看| 伊人成人在线视频| 国产精品1000部啪视频| 欧美亚日韩国产aⅴ精品中极品| 18免费在线视频| 亚洲一区二区三区四区视频| 黄色精品免费| 少妇按摩一区二区三区| 欧美三级资源在线| av在线官网| 久久国产欧美精品| 奇米在线7777在线精品| 欧美三级日本三级| 日韩成人中文电影| 欧美电影在线观看网站| 成年人视频网站免费| 国产午夜一区二区三区| 99久久精品国产成人一区二区 | 国产亚洲精品精品国产亚洲综合| 一级黄色录像免费看| 成人免费av网站| 又色又爽又黄无遮挡的免费视频| 欧美成人在线影院| 伊人精品一区| 在线成人免费av| 色婷婷亚洲综合| 羞羞的视频在线看| 欧美日韩三区四区| 国产成人精品一区二区三区四区| 久久精品视频7| 欧美老女人xx| 欧美视频免费| 亚洲一区和二区| 欧美日韩国产首页| 国产理论在线| 天天干天天色天天爽| 91丨九色porny丨蝌蚪| a毛片在线免费观看| 国产精品xxx视频| 99伊人成综合|