горилла / websocket настройка предела чтения? - PullRequest
0 голосов
/ 29 октября 2018
// SetReadLimit sets the maximum size for a message read from the peer. If a
// message exceeds the limit, the connection sends a close message to the peer
// and returns ErrReadLimit to the application.
func (c *Conn) SetReadLimit(limit int64) {
    c.readLimit = limit
}

Какая единица лимита? KB? МБ?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

По источникам gorilla/websocket, в байтах.

const readLimit = 512
message := make([]byte, readLimit+1)
.....
rc.SetReadLimit(readLimit)

Вот полный модульный тест:

func TestReadLimit(t *testing.T) {

    const readLimit = 512
    message := make([]byte, readLimit+1)

    var b1, b2 bytes.Buffer
    wc := newConn(&fakeNetConn{Writer: &b1}, false, 1024, readLimit-2, nil, nil, nil)
    rc := newTestConn(&b1, &b2, true)
    rc.SetReadLimit(readLimit)

    // Send message at the limit with interleaved pong.
    w, _ := wc.NextWriter(BinaryMessage)
    w.Write(message[:readLimit-1])
    wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second))
    w.Write(message[:1])
    w.Close()

    // Send message larger than the limit.
    wc.WriteMessage(BinaryMessage, message[:readLimit+1])

    op, _, err := rc.NextReader()
    if op != BinaryMessage || err != nil {
        t.Fatalf("1: NextReader() returned %d, %v", op, err)
    }
    op, r, err := rc.NextReader()
    if op != BinaryMessage || err != nil {
        t.Fatalf("2: NextReader() returned %d, %v", op, err)
    }
    _, err = io.Copy(ioutil.Discard, r)
    if err != ErrReadLimit {
        t.Fatalf("io.Copy() returned %v", err)
    }
}
0 голосов
/ 29 октября 2018

Это, кажется, не очень хорошо документировано, но согласно соответствующему тесту оно в байтах. В любом случае, я бы предположил, что это единица по умолчанию

Соответствующий код теста:

// Send message at the limit with interleaved pong.
w, _ := wc.NextWriter(BinaryMessage)
w.Write(message[:readLimit-1])
wc.WriteControl(PongMessage, []byte("this is a pong"), time.Now().Add(10*time.Second))
w.Write(message[:1])
w.Close()

// Send message larger than the limit.
wc.WriteMessage(BinaryMessage, message[:readLimit+1])

// ...

_, err = io.Copy(ioutil.Discard, r)
if err != ErrReadLimit {
    t.Fatalf("io.Copy() returned %v", err)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...