func (bc *BackendConn) newBackendReader() (*redis.Conn, chan<- *Request, error) { c, err := redis.DialTimeout(bc.addr, 1024*512, time.Second) if err != nil { return nil, nil, err } c.ReaderTimeout = time.Minute c.WriterTimeout = time.Minute if err := bc.verifyAuth(c); err != nil { c.Close() return nil, nil, err } tasks := make(chan *Request, 4096) go func() { defer c.Close() for r := range tasks { resp, err := c.Reader.Decode() bc.setResponse(r, resp, err) if err != nil { // close tcp to tell writer we are failed and should quit c.Close() } } }() return c, tasks, nil }
func (bc *BackendConn) newBackendReader() (*redis.Conn, chan<- *Request, error) { c, err := redis.DialTimeout(bc.addr, 1024*512, time.Second) if err != nil { return nil, nil, err } c.ReaderTimeout = time.Minute c.WriterTimeout = time.Minute tasks := make(chan *Request, 4096) go func() { defer c.Close() for r := range tasks { resp, err := c.Reader.Decode() bc.setResponse(r, resp, err) } }() return c, tasks, nil }