登录
首页 >  Golang >  Go问答

限制 gorilla/websocket 的读取?

来源:stackoverflow

时间:2024-03-06 14:54:27 217浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《限制 gorilla/websocket 的读取?》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

// 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
}

极限的单位是什么?知识库? mb?


解决方案


基于 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)
    }
}

这似乎确实没有详细记录,但根据 corresponding test 它是以字节为单位的。无论如何,我认为这是默认单位。

相关测试代码:

// 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)
}

好了,本文到此结束,带大家了解了《限制 gorilla/websocket 的读取?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>