mosn

Форк
0
/
http2.go 
63 строки · 1.3 Кб
1
package http
2

3
import (
4
	"net"
5
	"net/http"
6
	"time"
7

8
	"golang.org/x/net/http2"
9
	"golang.org/x/net/http2/h2c"
10
	"mosn.io/mosn/pkg/log"
11
	"mosn.io/mosn/pkg/protocol"
12
	"mosn.io/mosn/test/lib"
13
	"mosn.io/mosn/test/lib/types"
14
)
15

16
func init() {
17
	lib.RegisterCreateServer("Http2", NewHTTP2Server)
18
	lib.RegisterCreateClient("Http2", NewHttp2Client)
19
}
20

21
type MockHttp2Server struct {
22
	*MockHttpServer
23
}
24

25
func NewHTTP2Server(config interface{}) types.MockServer {
26
	s := NewHTTPServer(config)
27
	return &MockHttp2Server{
28
		MockHttpServer: s.(*MockHttpServer),
29
	}
30
}
31

32
func (s *MockHttp2Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
33
	if r.Proto != "HTTP/2.0" {
34
		w.WriteHeader(http.StatusHTTPVersionNotSupported)
35
		return
36
	}
37
	s.MockHttpServer.ServeHTTP(w, r)
38
}
39

40
func (s *MockHttp2Server) Start() {
41
	s.mutex.Lock()
42
	defer s.mutex.Unlock()
43
	if s.listener != nil {
44
		return
45
	}
46
	ln, err := net.Listen("tcp", s.addr)
47
	if err != nil {
48
		log.DefaultLogger.Fatalf("listen %s failed", s.addr)
49
	}
50
	s.listener = NewStatsListener(ln, s.stats)
51

52
	h2s := &http2.Server{IdleTimeout: 1 * time.Minute}
53
	handler := http.HandlerFunc(s.ServeHTTP)
54
	s.server.Handler = h2c.NewHandler(handler, h2s)
55
	go s.server.Serve(s.listener)
56
}
57

58
func NewHttp2Client(config interface{}) types.MockClient {
59
	client := NewHttpClient(config)
60
	rc := client.(*MockHttpClient)
61
	rc.protocolName = protocol.HTTP2
62
	return rc
63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.