116 lines
2.7 KiB
Go
116 lines
2.7 KiB
Go
|
package server
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type ReadWriteHandler interface {
|
||
|
GetMaxMessageSize() int64
|
||
|
GetReadBufferSize() int
|
||
|
GetWriteBufferSize() int
|
||
|
GetReadTimeout() time.Duration
|
||
|
GetWriteTimeout() time.Duration
|
||
|
GetPongTimeout() time.Duration
|
||
|
GetPingTimeout() time.Duration
|
||
|
GetPingPeriod() time.Duration
|
||
|
|
||
|
IsEnableCompression() bool
|
||
|
}
|
||
|
|
||
|
type ReadWriteHandlers struct {
|
||
|
ReadWriteHandler
|
||
|
|
||
|
MaxMessageSize int64
|
||
|
// Per-connection buffer size for requests' reading.
|
||
|
// This also limits the maximum header size.
|
||
|
//
|
||
|
// Increase this buffer if your clients send multi-KB RequestURIs
|
||
|
// and/or multi-KB headers (for example, BIG cookies).
|
||
|
//
|
||
|
// Default buffer size is used if not set.
|
||
|
ReadBufferSize int
|
||
|
// Per-connection buffer size for responses' writing.
|
||
|
//
|
||
|
// Default buffer size is used if not set.
|
||
|
WriteBufferSize int
|
||
|
// Maximum duration for reading the full request (including body).
|
||
|
//
|
||
|
// This also limits the maximum duration for idle keep-alive
|
||
|
// connections.
|
||
|
//
|
||
|
// By default request read timeout is unlimited.
|
||
|
ReadTimeout time.Duration
|
||
|
|
||
|
// Maximum duration for writing the full response (including body).
|
||
|
//
|
||
|
// By default response write timeout is unlimited.
|
||
|
WriteTimeout time.Duration
|
||
|
|
||
|
PongTimeout time.Duration
|
||
|
PingTimeout time.Duration
|
||
|
PingPeriod time.Duration
|
||
|
|
||
|
EnableCompression bool
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) GetMaxMessageSize() int64 {
|
||
|
return rwh.MaxMessageSize
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) GetReadBufferSize() int {
|
||
|
return rwh.ReadBufferSize
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) GetWriteBufferSize() int {
|
||
|
return rwh.WriteBufferSize
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) GetReadTimeout() time.Duration {
|
||
|
return rwh.ReadTimeout
|
||
|
}
|
||
|
func (rwh *ReadWriteHandlers) GetWriteTimeout() time.Duration {
|
||
|
return rwh.WriteTimeout
|
||
|
}
|
||
|
func (rwh *ReadWriteHandlers) GetPongTimeout() time.Duration {
|
||
|
return rwh.PongTimeout
|
||
|
}
|
||
|
func (rwh *ReadWriteHandlers) GetPingTimeout() time.Duration {
|
||
|
return rwh.PingTimeout
|
||
|
}
|
||
|
func (rwh *ReadWriteHandlers) GetPingPeriod() time.Duration {
|
||
|
return rwh.PingPeriod
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) IsEnableCompression() bool {
|
||
|
return rwh.EnableCompression
|
||
|
}
|
||
|
|
||
|
func (rwh *ReadWriteHandlers) Validate() error {
|
||
|
if rwh.MaxMessageSize <= 0 {
|
||
|
rwh.MaxMessageSize = DefaultMaxMessageSize
|
||
|
}
|
||
|
if rwh.ReadBufferSize <= 0 {
|
||
|
rwh.ReadBufferSize = DefaultReadBufferSize
|
||
|
}
|
||
|
if rwh.WriteBufferSize <= 0 {
|
||
|
rwh.WriteBufferSize = DefaultWriteBufferSize
|
||
|
}
|
||
|
if rwh.ReadTimeout <= 0 {
|
||
|
rwh.ReadTimeout = DefaultReadTimeout
|
||
|
}
|
||
|
if rwh.WriteTimeout <= 0 {
|
||
|
rwh.WriteTimeout = DefaultWriteTimeout
|
||
|
}
|
||
|
if rwh.PongTimeout <= 0 {
|
||
|
rwh.PongTimeout = DefaultPongTimeout
|
||
|
}
|
||
|
if rwh.PingTimeout <= 0 {
|
||
|
rwh.PingTimeout = DefaultPingTimeout
|
||
|
}
|
||
|
if rwh.PingPeriod <= 0 {
|
||
|
rwh.PingPeriod = (rwh.PingTimeout * 9) / 10
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|