Go 기반 서버 푸시
개시하다
서버 푸시
이루어지다
$ tree .
.
├── ca.crt
├── go.mod
├── go.sum
├── main.go
├── static
│ ├── index.html
│ └── lena.png
├── server.crt
└── server.key
ca.crt
, 서버 인증서server.crt
, 서버 기밀 키server.key
를 준비했다.사이트에서 사용하는 파일은 static
의 아래에 설정되어 있다.lena.png
에 관해서는 이미지 처리 분야에서 자주 사용하는 lena 이미지를 사용했다.package main
import (
"flag"
"github.com/labstack/echo/v4"
"log"
"net/http"
)
const defaultEnableServerPush = true
func main() {
var enableServerPush bool
flag.BoolVar(&enableServerPush, "enableServerPush", defaultEnableServerPush, "server push option")
flag.Parse()
log.Printf("enableServerPush: %t", enableServerPush)
e := NewServerPushServer(enableServerPush)
e.StartTLS(":18443", "server.crt", "server.key")
}
func NewServerPushServer(enableServerPush bool) *echo.Echo {
e := echo.New()
e.Static("/", "static")
if enableServerPush {
e.GET("/", serverPush)
}
return e
}
func serverPush(c echo.Context) error {
pusher, ok := c.Response().Writer.(http.Pusher)
if ok {
if err := pusher.Push("/lena.png", nil); err != nil {
return err
}
}
return c.File("static/index.html")
}
enableServerPush
은 옵션을 통해 서버 푸시가 유효하거나 무효인지 설정할 수 있다.index.html
의 설치는 다음과 같습니다.<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Server Push Test</title>
</head>
<body>
<img class="top-image" src="/lena.png">
</body>
</html>
확인
main.go
는 크롬 접근https://localhost:18443/
시 개발 도구를 통해 통신 내용을 확인했다.서버 추진을 해제하고 서버를 시작하려면 다음 명령을 사용합니다.$ go run main.go --enableServerPush=false
잘못된 서버 푸시
우선 서버가 무효로 추정되었을 때의 통신 내용입니다.개발자 도구
Network
탭에 다음과 같은 내용을 표시합니다.전체적으로 168ms가 필요한지 확인할 수 있습니다.lena.png
의 Waterfall
항목에 마우스를 놓으면 다음과 같은 내용이 표시됩니다.요청 이미지에서 다운로드 완료(Content Download)까지 약 40ms가 필요한지 확인할 수 있습니다.서버 푸시 유효 시
다음은 서버가 시간을 끌 때 사용하는 통신 내용입니다.다음은
Network
탭의 내용입니다.전체적으로 77ms가 필요한지 확인할 수 있습니다.lena.png
의 Waterfall
내용은 다음과 같다.그림은 줄을 서 있는 그림만 읽을 수 있기 때문에 약 9밀리초가 걸렸다.총결산
Reference
이 문제에 관하여(Go 기반 서버 푸시), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/empenguin/articles/3dd9359b91e73d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)