コード例 #1
0
ファイル: proxy.go プロジェクト: leoYY/codis
func (s *Server) handleConns() {
	ch := make(chan net.Conn, 4096)
	defer close(ch)

	go func() {
		for c := range ch {
			x, ok := s.sessionPool.Get().(*router.Session)
			if !ok || x == nil {
				x = router.NewSessionSize(c, s.conf.passwd, s.conf.maxBufSize, s.conf.maxTimeout)
			} else {
				x.Reset(c, s.conf.passwd, s.conf.maxTimeout)
			}
			go func() {
				x.Serve(s.router, s.conf.maxPipeline)
				s.sessionPool.Put(x)
			}()
		}
	}()

	for {
		c, err := s.listener.Accept()
		if err != nil {
			return
		} else {
			ch <- c
		}
	}
}
コード例 #2
0
ファイル: proxy.go プロジェクト: cougar731/codis
func (s *Server) handleConns() {
	ch := make(chan net.Conn, 4096)
	defer close(ch)

	go func() {
		for c := range ch {
			x := router.NewSessionSize(c, s.conf.passwd, s.conf.maxBufSize, s.conf.maxTimeout)
			go x.Serve(s.router, s.conf.maxPipeline)
		}
	}()

	for {
		c, err := s.listener.Accept()
		if err != nil {
			if ne, ok := err.(net.Error); ok && ne.Temporary() {
				log.WarnErrorf(err, "[%p] proxy accept new connection failed, get temporary error", s)
				time.Sleep(time.Millisecond * 10)
				continue
			}
			log.WarnErrorf(err, "[%p] proxy accept new connection failed, get non-temporary error, must shutdown", s)
			return
		} else {
			ch <- c
		}
	}
}
コード例 #3
0
ファイル: proxy.go プロジェクト: njucslqq/codis
func (s *Server) handleConns() {
	ch := make(chan net.Conn, 4096)
	defer close(ch)

	go func() {
		for c := range ch {
			x := router.NewSessionSize(c, s.conf.passwd, s.conf.maxBufSize, s.conf.maxTimeout)
			go x.Serve(s.router, s.conf.maxPipeline)
		}
	}()

	for {
		c, err := s.listener.Accept()
		if err != nil {
			return
		} else {
			ch <- c
		}
	}
}
コード例 #4
0
ファイル: proxy.go プロジェクト: cyflhn/codis
func (s *Server) handleConns() {
	ch := make(chan net.Conn, 4096)
	defer close(ch)

	go func() {
		for c := range ch {
			x := router.NewSessionSize(c, s.conf.passwd, s.conf.maxBufSize, s.conf.maxTimeout)
			go x.Serve(s.router, s.conf.maxPipeline)
		}
	}()

	for {
		c, err := s.listener.Accept()
		if err != nil {
			return
		} else {
			/*
				if s.status == SERVER_STATUS_STARTING {
					s.listener.Close()
					for {
						if s.status == SERVER_STATUS_STARTED {
							if l, err := net.Listen("tcp", ":"+strings.Split(s.info.Addr, ":")[1]); err != nil {
								log.ErrorErrorf(err, "open listener failed")
								time.Sleep(5 * time.Second)
							} else {
								s.listener = l
								break
							}
						} else {
							time.Sleep(5 * time.Second)
						}
					}
				} else {
					ch <- c
				}
			*/
			ch <- c
		}
	}
}