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 }