code: func (c *Conn) getClient() (*StreamClient, error) {
  	// Check for cached client
  	c.clientLock.Lock()
  	front := c.clients.Front()
  	if front != nil {
  		c.clients.Remove(front)
  	}
  	c.clientLock.Unlock()
  	if front != nil {
  		return front.Value.(*StreamClient), nil
  	}
  
  	// Open a new session
  	stream, err := c.session.Open()
  	if err != nil {
  		return nil, err
  	}
  
  	// Create the RPC client
  	codec := msgpackrpc.NewClientCodec(stream)
  
  	// Return a new stream client
  	sc := &StreamClient{
  		stream: stream,
  		codec:  codec,
  	}
  	return sc, nil
  }
docs: // getClient is used to get a cached or new client