由于缓冲区大小问题,导致服务器响应长时间卡顿问题
发布于 3 个月前 作者 jimhy 282 次浏览 来自 问答

问题:客户端发送二进制流到服务器时,mqtt.go的第455行,io.ReadFull(r, pub.msg)这句代码会卡主十几秒。 重现方法: 客户端发送100个字节以内的字节流时,服务器可以立即响应。 但是当客户端发送416个字节的字节流到服务器时,会出现十几秒的等待时间,客户端代码如下图: 11.png 服务端的这句代码卡主了,如下图: 2.png _, err = io.ReadFull(r, pub.msg)这句代码会卡十几秒,然后fmt.Println(“aaaaaaaaaaaaa”)这句才会打印出来 麻烦大神看一下

2 回复

你看看是不是这个问题,如果是的话一种方案是把缓存区调大,然后在读取的时候也可以做一下限制,以免被人为攻击 https://github.com/liangdas/mqant/issues/32

嗯,是如大神所说,是缓冲区大小的问题。修改代码如下: 3.png this.r = bufio.NewReaderSize(conn, 1024) this.w = bufio.NewWriterSize(conn, 1024) 我暂时设置的缓冲区大小是1024,大家可以按照自己的项目具体情况来设置。在这里多谢大神指点。

回到顶部