У меня есть tcp-сервер и клиент, сервер выполняет следующие действия:
func providerCallback(conn net.Conn) {
reader := bufio.NewReader(conn)
var err error
for {
lenbyte, _ := reader.Peek(4)
reader.Discard(4)
slen := int(binary.BigEndian.Uint32(lenbyte))
data, err = reader.Peek(slen)
process(data)
reader.Discard(slen)
}
}
Клиент, кажется, отправляет пакет быстрее, чем может обработать процесс, поэтому я хотел бы буферизовать запросы в bufioи обработать позже.
Однако, поскольку размер bufio фиксирован (4096, хотя я могу увеличить его, он все еще исправлен), что означает, что я не могу Reset
вручную, потому что может бытьвырезание пакета в конце bufio следующим образом:
| нормальные данные ... [Первые 20 байтов пакета P] |[остаток пакета P]
| ------------------- размер bufio ------------------ |
Как соединить обрезанный пакет и повторно использовать bufio для последующих пакетов?