Add ReadBufferSize and WriteBufferSize to the iris-ws, disable header copy also

This commit is contained in:
Makis Maropoulos 2016-06-16 20:08:59 +03:00
parent 647f0d704c
commit 0d482508fc
4 changed files with 30 additions and 18 deletions

View File

@ -40,17 +40,23 @@ type Websocket struct {
// Headers the response headers before upgrader // Headers the response headers before upgrader
// Default is empty // Default is empty
Headers map[string]string Headers map[string]string
// ReadBufferSize is the buffer size for the underline reader
ReadBufferSize int
// WriteBufferSize is the buffer size for the underline writer
WriteBufferSize int
} }
// DefaultWebsocket returns the default config for iris-ws websocket package // DefaultWebsocket returns the default config for iris-ws websocket package
func DefaultWebsocket() *Websocket { func DefaultWebsocket() *Websocket {
return &Websocket{ return &Websocket{
WriteTimeout: DefaultWriteTimeout, WriteTimeout: DefaultWriteTimeout,
PongTimeout: DefaultPongTimeout, PongTimeout: DefaultPongTimeout,
PingPeriod: DefaultPingPeriod, PingPeriod: DefaultPingPeriod,
MaxMessageSize: DefaultMaxMessageSize, MaxMessageSize: DefaultMaxMessageSize,
Headers: make(map[string]string, 0), ReadBufferSize: 4096,
Endpoint: "", WriteBufferSize: 4096,
Headers: make(map[string]string, 0),
Endpoint: "",
} }
} }

15
http.go
View File

@ -311,7 +311,6 @@ func (s *Server) listen() error {
if s.started { if s.started {
return errServerAlreadyStarted.Return() return errServerAlreadyStarted.Return()
} }
listener, err := net.Listen("tcp4", s.Config.ListeningAddr) listener, err := net.Listen("tcp4", s.Config.ListeningAddr)
if err != nil { if err != nil {
@ -362,7 +361,7 @@ func (s *Server) serve(l net.Listener) error {
// Open opens/starts/runs/listens (to) the server, listen tls if Cert && Key is registed, listenUNIX if Mode is registed, otherwise listen // Open opens/starts/runs/listens (to) the server, listen tls if Cert && Key is registed, listenUNIX if Mode is registed, otherwise listen
func (s *Server) Open() error { func (s *Server) Open() error {
if s.started { if s.IsListening() {
return errServerAlreadyStarted.Return() return errServerAlreadyStarted.Return()
} }
@ -389,16 +388,14 @@ func (s *Server) Open() error {
} }
// close closes the server // close closes the server
func (s *Server) close() error { func (s *Server) close() (err error) {
if !s.started { if !s.started || s.listener == nil {
return errServerIsClosed.Return() return errServerIsClosed.Return()
} }
s.started = false
err = s.listener.Close()
if s.listener != nil { return
s.started = false
return s.listener.Close()
}
return nil
} }
// errHandler returns na error with message: 'Passed argument is not func(*Context) neither an object which implements the iris.Handler with Serve(ctx *Context) // errHandler returns na error with message: 'Passed argument is not func(*Context) neither an object which implements the iris.Handler with Serve(ctx *Context)

13
iris.go
View File

@ -299,14 +299,24 @@ func (s *Framework) NoListen() *Server {
return s.HTTPServer return s.HTTPServer
} }
// CloseWithErr terminates the server and returns an error if any
func CloseWithErr() error {
return Default.CloseWithErr()
}
//Close terminates the server and panic if error occurs //Close terminates the server and panic if error occurs
func Close() { func Close() {
Default.Close() Default.Close()
} }
// CloseWithErr terminates the server and returns an error if any
func (s *Framework) CloseWithErr() error {
return s.closeServer()
}
//Close terminates the server and panic if error occurs //Close terminates the server and panic if error occurs
func (s *Framework) Close() { func (s *Framework) Close() {
s.Must(s.closeServer()) s.Must(s.CloseWithErr())
} }
// OnError registers a custom http error handler // OnError registers a custom http error handler
@ -1143,7 +1153,6 @@ func StaticContent(reqPath string, contentType string, content []byte) RouteName
func (api *muxAPI) StaticContent(reqPath string, cType string, content []byte) func(string) { // func(string) because we use that on websockets func (api *muxAPI) StaticContent(reqPath string, cType string, content []byte) func(string) { // func(string) because we use that on websockets
modtime := time.Now() modtime := time.Now()
modtimeStr := modtime.UTC().Format(config.TimeFormat) modtimeStr := modtime.UTC().Format(config.TimeFormat)
h := func(ctx *Context) { h := func(ctx *Context) {
if t, err := time.Parse(config.TimeFormat, ctx.RequestHeader(ifModifiedSince)); err == nil && modtime.Before(t.Add(config.StaticCacheDuration)) { if t, err := time.Parse(config.TimeFormat, ctx.RequestHeader(ifModifiedSince)); err == nil && modtime.Before(t.Add(config.StaticCacheDuration)) {
ctx.Response.Header.Del(contentType) ctx.Response.Header.Del(contentType)

View File

@ -73,7 +73,7 @@ func newServer(c *config.Websocket) *server {
onConnectionListeners: make([]ConnectionFunc, 0), onConnectionListeners: make([]ConnectionFunc, 0),
} }
s.upgrader = websocket.New(s.handleConnection) s.upgrader = websocket.Custom(s.handleConnection, s.config.ReadBufferSize, s.config.WriteBufferSize, false)
go s.serve() // start the server automatically go s.serve() // start the server automatically
return s return s
} }