1
0
mirror of https://github.com/labstack/echo.git synced 2025-06-06 23:46:16 +02:00

Merge branch 'mtojek-fix_missing_net_listener'

This commit is contained in:
Vishal Rana 2016-03-18 08:47:23 -07:00
commit da010b035d
4 changed files with 42 additions and 4 deletions

View File

@ -5,6 +5,8 @@ import (
"mime/multipart" "mime/multipart"
"time" "time"
"net"
"github.com/labstack/gommon/log" "github.com/labstack/gommon/log"
) )
@ -137,6 +139,7 @@ type (
// Config defines engine configuration. // Config defines engine configuration.
Config struct { Config struct {
Address string // TCP address to listen on. Address string // TCP address to listen on.
Listener net.Listener // Custom `net.Listener`. If set, server accepts connections on it.
TLSCertfile string // TLS certificate file path. TLSCertfile string // TLS certificate file path.
TLSKeyfile string // TLS key file path. TLSKeyfile string // TLS key file path.
ReadTimeout time.Duration // Maximum duration before timing out read of the request. ReadTimeout time.Duration // Maximum duration before timing out read of the request.

View File

@ -123,10 +123,27 @@ func (s *Server) Start() {
addr := s.config.Address addr := s.config.Address
certfile := s.config.TLSCertfile certfile := s.config.TLSCertfile
keyfile := s.config.TLSKeyfile keyfile := s.config.TLSKeyfile
if certfile != "" && keyfile != "" {
s.logger.Fatal(fasthttp.ListenAndServeTLS(addr, certfile, keyfile, handler)) if s.config.Listener == nil {
s.startDefaultListener(addr, certfile, keyfile, handler)
} else { } else {
s.logger.Fatal(fasthttp.ListenAndServe(addr, handler)) s.startCustomListener(certfile, keyfile, handler)
}
}
func (s *Server) startDefaultListener(addr, certfile, keyfile string, h fasthttp.RequestHandler) {
if certfile != "" && keyfile != "" {
s.logger.Fatal(fasthttp.ListenAndServeTLS(addr, certfile, keyfile, h))
} else {
s.logger.Fatal(fasthttp.ListenAndServe(addr, h))
}
}
func (s *Server) startCustomListener(certfile, keyfile string, h fasthttp.RequestHandler) {
if certfile != "" && keyfile != "" {
s.logger.Fatal(fasthttp.ServeTLS(s.config.Listener, certfile, keyfile, h))
} else {
s.logger.Fatal(fasthttp.Serve(s.config.Listener, h))
} }
} }

View File

@ -94,6 +94,15 @@ func (s *Server) SetLogger(l *log.Logger) {
func (s *Server) Start() { func (s *Server) Start() {
certfile := s.config.TLSCertfile certfile := s.config.TLSCertfile
keyfile := s.config.TLSKeyfile keyfile := s.config.TLSKeyfile
if s.config.Listener == nil {
s.startDefaultListener(certfile, keyfile)
} else {
s.startCustomListener()
}
}
func (s *Server) startDefaultListener(certfile, keyfile string) {
if certfile != "" && keyfile != "" { if certfile != "" && keyfile != "" {
s.logger.Fatal(s.ListenAndServeTLS(certfile, keyfile)) s.logger.Fatal(s.ListenAndServeTLS(certfile, keyfile))
} else { } else {
@ -101,6 +110,10 @@ func (s *Server) Start() {
} }
} }
func (s *Server) startCustomListener() {
s.logger.Fatal(s.Serve(s.config.Listener))
}
// ServeHTTP implements `http.Handler` interface. // ServeHTTP implements `http.Handler` interface.
func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) { func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// Request // Request

View File

@ -575,6 +575,7 @@ func TestRouterAPI(t *testing.T) {
func BenchmarkRouterGitHubAPI(b *testing.B) { func BenchmarkRouterGitHubAPI(b *testing.B) {
e := New() e := New()
r := e.router r := e.router
b.ReportAllocs()
// Add routes // Add routes
for _, route := range api { for _, route := range api {
@ -584,10 +585,14 @@ func BenchmarkRouterGitHubAPI(b *testing.B) {
} }
// Find routes // Find routes
c := e.pool.Get().(*context)
for i := 0; i < b.N; i++ { for i := 0; i < b.N; i++ {
for _, route := range api { for _, route := range api {
// c := e.pool.Get().(*context)
c := e.GetContext()
r.Find(route.Method, route.Path, c) r.Find(route.Method, route.Path, c)
// router.Find(r.Method, r.Path, c)
e.PutContext(c)
// e.pool.Put(c)
} }
} }
} }