当前位置:首页 >IT科技 >徒手用 Go 写个 Redis 服务器(Godis) 正文

徒手用 Go 写个 Redis 服务器(Godis)

来源:益强资讯优选   作者:IT科技类资讯   时间:2025-11-04 21:17:30
徒手用 Go 写个 Redis 服务器(Godis)
复制func ListenAndServe(address string) {      // 绑定监听地址      listener,徒手 err := net.Listen("tcp", address)      if err != nil {          log.Fatal(fmt.Sprintf("listen err: %v", err))      }      defer listener.Close()      log.Println(fmt.Sprintf("bind: %s, start listening...", address))        for {          // Accept 会一直阻塞直到有新的连接建立或者listen中断才会返回          conn, err := listener.Accept()          if err != nil {              // 通常是由于listener被关闭无法继续监听导致的错误              log.Fatal(fmt.Sprintf("accept err: %v", err))          }          // 开启新的b2b供应网 goroutine 处理该连接          go Handle(conn)      }  }    func Handle(conn net.Conn) {      reader := bufio.NewReader(conn)      for {          // ReadString 会一直阻塞直到遇到分隔符 \n          // 遇到分隔符后 ReadString 会返回上次遇到分隔符到现在收到的所有数据          // 若在遇到分隔符之前发生异常, ReadString 会返回已收到的数据和错误信息          msg, err := reader.ReadString(\n)          if err != nil {              // 通常遇到的免费信息发布网错误是连接中断或被关闭,用io.EOF表示              if err == io.EOF {                  log.Println("connection close")              } else {                  log.Println(err)              }              return          }          b := []byte(msg)          // 将收到的亿华云计算服务信息发送给客户端          conn.Write(b)      }  }    func main() {      ListenAndServe(":8000") }  1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.

标签:

责任编辑:人工智能