mirror of https://github.com/gorilla/websocket.git
Cleanup buffer size calculations.
This commit is contained in:
parent
79b87dd5c7
commit
7d2ea39ebc
12
client.go
12
client.go
|
@ -215,16 +215,6 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
readBufferSize := d.ReadBufferSize
|
|
||||||
if readBufferSize == 0 {
|
|
||||||
readBufferSize = 4096
|
|
||||||
}
|
|
||||||
|
|
||||||
writeBufferSize := d.WriteBufferSize
|
|
||||||
if writeBufferSize == 0 {
|
|
||||||
writeBufferSize = 4096
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(d.Subprotocols) > 0 {
|
if len(d.Subprotocols) > 0 {
|
||||||
h := http.Header{}
|
h := http.Header{}
|
||||||
for k, v := range requestHeader {
|
for k, v := range requestHeader {
|
||||||
|
@ -234,7 +224,7 @@ func (d *Dialer) Dial(urlStr string, requestHeader http.Header) (*Conn, *http.Re
|
||||||
requestHeader = h
|
requestHeader = h
|
||||||
}
|
}
|
||||||
|
|
||||||
conn, resp, err := NewClient(netConn, u, requestHeader, readBufferSize, writeBufferSize)
|
conn, resp, err := NewClient(netConn, u, requestHeader, d.ReadBufferSize, d.WriteBufferSize)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, resp, err
|
return nil, resp, err
|
||||||
}
|
}
|
||||||
|
|
54
conn.go
54
conn.go
|
@ -16,6 +16,20 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask
|
||||||
|
maxControlFramePayloadSize = 125
|
||||||
|
finalBit = 1 << 7
|
||||||
|
maskBit = 1 << 7
|
||||||
|
writeWait = time.Second
|
||||||
|
|
||||||
|
defaultReadBufferSize = 4096
|
||||||
|
defaultWriteBufferSize = 4096
|
||||||
|
|
||||||
|
continuationFrame = 0
|
||||||
|
noFrame = -1
|
||||||
|
)
|
||||||
|
|
||||||
// Close codes defined in RFC 6455, section 11.7.
|
// Close codes defined in RFC 6455, section 11.7.
|
||||||
const (
|
const (
|
||||||
CloseNormalClosure = 1000
|
CloseNormalClosure = 1000
|
||||||
|
@ -55,20 +69,13 @@ const (
|
||||||
PongMessage = 10
|
PongMessage = 10
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
// ErrCloseSent is returned when the application writes a message to the
|
||||||
continuationFrame = 0
|
// connection after sending a close message.
|
||||||
noFrame = -1
|
var ErrCloseSent = errors.New("websocket: close sent")
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
// ErrReadLimit is returned when reading a message that is larger than the
|
||||||
// ErrCloseSent is returned when the application writes a message to the
|
// read limit set for the connection.
|
||||||
// connection after sending a close message.
|
var ErrReadLimit = errors.New("websocket: read limit exceeded")
|
||||||
ErrCloseSent = errors.New("websocket: close sent")
|
|
||||||
|
|
||||||
// ErrReadLimit is returned when reading a message that is larger than the
|
|
||||||
// read limit set for the connection.
|
|
||||||
ErrReadLimit = errors.New("websocket: read limit exceeded")
|
|
||||||
)
|
|
||||||
|
|
||||||
// netError satisfies the net Error interface.
|
// netError satisfies the net Error interface.
|
||||||
type netError struct {
|
type netError struct {
|
||||||
|
@ -99,14 +106,6 @@ var (
|
||||||
errInvalidControlFrame = errors.New("websocket: invalid control frame")
|
errInvalidControlFrame = errors.New("websocket: invalid control frame")
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
maxFrameHeaderSize = 2 + 8 + 4 // Fixed header + length + mask
|
|
||||||
maxControlFramePayloadSize = 125
|
|
||||||
finalBit = 1 << 7
|
|
||||||
maskBit = 1 << 7
|
|
||||||
writeWait = time.Second
|
|
||||||
)
|
|
||||||
|
|
||||||
func hideTempErr(err error) error {
|
func hideTempErr(err error) error {
|
||||||
if e, ok := err.(net.Error); ok && e.Temporary() {
|
if e, ok := err.(net.Error); ok && e.Temporary() {
|
||||||
err = struct{ error }{err}
|
err = struct{ error }{err}
|
||||||
|
@ -167,17 +166,24 @@ type Conn struct {
|
||||||
handlePing func(string) error
|
handlePing func(string) error
|
||||||
}
|
}
|
||||||
|
|
||||||
func newConn(conn net.Conn, isServer bool, readBufSize, writeBufSize int) *Conn {
|
func newConn(conn net.Conn, isServer bool, readBufferSize, writeBufferSize int) *Conn {
|
||||||
mu := make(chan bool, 1)
|
mu := make(chan bool, 1)
|
||||||
mu <- true
|
mu <- true
|
||||||
|
|
||||||
|
if readBufferSize == 0 {
|
||||||
|
readBufferSize = defaultReadBufferSize
|
||||||
|
}
|
||||||
|
if writeBufferSize == 0 {
|
||||||
|
writeBufferSize = defaultWriteBufferSize
|
||||||
|
}
|
||||||
|
|
||||||
c := &Conn{
|
c := &Conn{
|
||||||
isServer: isServer,
|
isServer: isServer,
|
||||||
br: bufio.NewReaderSize(conn, readBufSize),
|
br: bufio.NewReaderSize(conn, readBufferSize),
|
||||||
conn: conn,
|
conn: conn,
|
||||||
mu: mu,
|
mu: mu,
|
||||||
readFinal: true,
|
readFinal: true,
|
||||||
writeBuf: make([]byte, writeBufSize+maxFrameHeaderSize),
|
writeBuf: make([]byte, writeBufferSize+maxFrameHeaderSize),
|
||||||
writeFrameType: noFrame,
|
writeFrameType: noFrame,
|
||||||
writePos: maxFrameHeaderSize,
|
writePos: maxFrameHeaderSize,
|
||||||
}
|
}
|
||||||
|
|
15
server.go
15
server.go
|
@ -21,11 +21,6 @@ type HandshakeError struct {
|
||||||
|
|
||||||
func (e HandshakeError) Error() string { return e.message }
|
func (e HandshakeError) Error() string { return e.message }
|
||||||
|
|
||||||
const (
|
|
||||||
defaultReadBufferSize = 4096
|
|
||||||
defaultWriteBufferSize = 4096
|
|
||||||
)
|
|
||||||
|
|
||||||
// Upgrader specifies parameters for upgrading an HTTP connection to a
|
// Upgrader specifies parameters for upgrading an HTTP connection to a
|
||||||
// WebSocket connection.
|
// WebSocket connection.
|
||||||
type Upgrader struct {
|
type Upgrader struct {
|
||||||
|
@ -147,15 +142,7 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade
|
||||||
return nil, errors.New("websocket: client sent data before handshake is complete")
|
return nil, errors.New("websocket: client sent data before handshake is complete")
|
||||||
}
|
}
|
||||||
|
|
||||||
readBufSize := u.ReadBufferSize
|
c := newConn(netConn, true, u.ReadBufferSize, u.WriteBufferSize)
|
||||||
if readBufSize == 0 {
|
|
||||||
readBufSize = defaultReadBufferSize
|
|
||||||
}
|
|
||||||
writeBufSize := u.WriteBufferSize
|
|
||||||
if writeBufSize == 0 {
|
|
||||||
writeBufSize = defaultWriteBufferSize
|
|
||||||
}
|
|
||||||
c := newConn(netConn, true, readBufSize, writeBufSize)
|
|
||||||
c.subprotocol = subprotocol
|
c.subprotocol = subprotocol
|
||||||
|
|
||||||
p := c.writeBuf[:0]
|
p := c.writeBuf[:0]
|
||||||
|
|
Loading…
Reference in New Issue