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

Mention about custom listener

Signed-off-by: Vishal Rana <vr@labstack.com>
This commit is contained in:
Vishal Rana 2017-01-18 12:17:44 -08:00
parent 49321f5829
commit 069e80b9e0
4 changed files with 45 additions and 9 deletions

29
echo.go
View File

@ -562,27 +562,30 @@ func (e *Echo) startTLS(address string) error {
}
// StartServer starts a custom http server.
func (e *Echo) StartServer(s *http.Server) error {
func (e *Echo) StartServer(s *http.Server) (err error) {
// Setup
e.colorer.SetOutput(e.Logger.Output())
s.Handler = e
s.ErrorLog = e.stdLogger
l, err := net.Listen("tcp", s.Addr)
if err != nil {
return err
}
if s.TLSConfig == nil {
if e.Listener == nil {
e.Listener = tcpKeepAliveListener{l.(*net.TCPListener)}
e.Listener, err = newListener(s.Addr)
if err != nil {
return err
}
}
e.colorer.Printf("⇛ http server started on %s\n", e.colorer.Green(s.Addr))
e.colorer.Printf("⇛ http server started on %s\n", e.colorer.Green(e.Listener.Addr()))
return s.Serve(e.Listener)
}
if e.TLSListener == nil {
e.TLSListener = tls.NewListener(tcpKeepAliveListener{l.(*net.TCPListener)}, s.TLSConfig)
l, err := newListener(s.Addr)
if err != nil {
return err
}
e.TLSListener = tls.NewListener(l, s.TLSConfig)
}
e.colorer.Printf("⇛ https server started on %s\n", e.colorer.Green(s.Addr))
e.colorer.Printf("⇛ https server started on %s\n", e.colorer.Green(e.TLSListener.Addr()))
return s.Serve(e.TLSListener)
}
@ -646,3 +649,11 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
tc.SetKeepAlivePeriod(3 * time.Minute)
return tc, nil
}
func newListener(address string) (*tcpKeepAliveListener, error) {
l, err := net.Listen("tcp", address)
if err != nil {
return nil, err
}
return &tcpKeepAliveListener{l.(*net.TCPListener)}, nil
}

View File

@ -11,6 +11,8 @@ import (
"errors"
"time"
"github.com/stretchr/testify/assert"
)
@ -391,6 +393,7 @@ func TestEchoStart(t *testing.T) {
go func() {
assert.NoError(t, e.Start(":0"))
}()
time.Sleep(200 * time.Millisecond)
}
func TestEchoStartTLS(t *testing.T) {
@ -398,6 +401,7 @@ func TestEchoStartTLS(t *testing.T) {
go func() {
assert.NoError(t, e.StartTLS(":0", "_fixture/certs/cert.pem", "_fixture/certs/key.pem"))
}()
time.Sleep(200 * time.Millisecond)
}
func testMethod(t *testing.T, method, path string, e *Echo) {

View File

@ -52,6 +52,21 @@ s := &http.Server{
e.Logger.Fatal(e.StartServer(s))
```
## Custom Listener
`Echo#*Listener` can be used to run a custom listener.
*Example*
```go
l, err := net.Listen("tcp", ":1323")
if err != nil {
e.Logger.Fatal(l)
}
e.Listener = l
e.Logger.Fatal(e.Start(""))
```
## Disable HTTP/2
`Echo#DisableHTTP2` can be used disable HTTP/2 protocol.

View File

@ -51,3 +51,9 @@ Q: How to run Echo on a specific IP address?
```go
e.Start("<ip>:<port>")
```
Q: How to run Echo on a random port?
```go
e.Start(":0")
```