使用读取Redis服务器之间的TCP连接 bufio.Scannerfmt.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)?
2 回答
UYOU
TA贡献1878条经验 获得超4个赞
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")
}
- 2 回答
- 0 关注
- 314 浏览
添加回答
举报
0/150
提交
取消