为了账号安全,请及时绑定邮箱和手机立即绑定

Go bufio.Scanner 在读取到 Redis 的 TCP 连接时停止

Go bufio.Scanner 在读取到 Redis 的 TCP 连接时停止

Go
jeck猫 2021-08-10 17:11:26
使用读取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")

}


查看完整回答
反对 回复 2021-08-10
  • 2 回答
  • 0 关注
  • 314 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信