使用bufio.Scanner
读取Redis服务器之间的TCP连接
fmt.Fprintf(conn, "*3\r\n$3\r\nSET\r\n$5\r\nmykey\r\n$7\r\nHello!!\r\n")
scanner := bufio.NewScanner(conn)
for {
// fmt.Println("marker00")
if ok := scanner.Scan(); !ok {
// fmt.Println("marker01")
break
}
// fmt.Println("marker02")
fmt.Println(scanner.Text())
}
"+OK"是第一次扫描的结果,但第二次扫描在调用 Scan
方法时停止。 (marker00 -> marker02 -> marker00 并且不再有输出)
为什么 Scan
停止,我如何知道 TCP 响应结束(不使用 bufio.Reader
)?
最佳答案
Redis 不会在发送命令后为您关闭连接。 Scan() 在未发送的 io.EOF 之后结束。
看看这个:
package main
import (
"bufio"
"fmt"
"net"
)
// before go run, you must hit `redis-server` to wake redis up
func main() {
conn, _ := net.Dial("tcp", "localhost:6379")
message := "*3\r\n$3\r\nSET\r\n$1\r\na\r\n$1\r\nb\r\n"
go func(conn net.Conn) {
for i := 0; i < 10; i++ {
fmt.Fprintf(conn, message)
}
}(conn)
scanner := bufio.NewScanner(conn)
for {
if ok := scanner.Scan(); !ok {
break
}
fmt.Println(scanner.Text())
}
fmt.Println("Scanning ended")
}
关于tcp - Go bufio.Scanner 在读取到 Redis 的 TCP 连接时停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25469196/