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,6 +40,10 @@ type Websocket struct {
// Headers the response headers before upgrader
// Default is empty
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
@ -49,6 +53,8 @@ func DefaultWebsocket() *Websocket {
PongTimeout: DefaultPongTimeout,
PingPeriod: DefaultPingPeriod,
MaxMessageSize: DefaultMaxMessageSize,
ReadBufferSize: 4096,
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 {
return errServerAlreadyStarted.Return()
}
listener, err := net.Listen("tcp4", s.Config.ListeningAddr)
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
func (s *Server) Open() error {
if s.started {
if s.IsListening() {
return errServerAlreadyStarted.Return()
}
@ -389,16 +388,14 @@ func (s *Server) Open() error {
}
// close closes the server
func (s *Server) close() error {
if !s.started {
func (s *Server) close() (err error) {
if !s.started || s.listener == nil {
return errServerIsClosed.Return()
}
if s.listener != nil {
s.started = false
return s.listener.Close()
}
return nil
err = s.listener.Close()
return
}
// 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
}
// 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
func 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
func (s *Framework) Close() {
s.Must(s.closeServer())
s.Must(s.CloseWithErr())
}
// 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
modtime := time.Now()
modtimeStr := modtime.UTC().Format(config.TimeFormat)
h := func(ctx *Context) {
if t, err := time.Parse(config.TimeFormat, ctx.RequestHeader(ifModifiedSince)); err == nil && modtime.Before(t.Add(config.StaticCacheDuration)) {
ctx.Response.Header.Del(contentType)

View File

@ -73,7 +73,7 @@ func newServer(c *config.Websocket) *server {
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
return s
}