web/callback_controller_handler.go (36 lines of code) (raw):

package web import "sync" var callBackControllerHandler *CallBackControllerHandler var once sync.Once type CallBackControllerHandler struct { controllerCh chan *CallBackController poolSize int } func NewCallBackControllerHandler() *CallBackControllerHandler { handler := &CallBackControllerHandler{ controllerCh: make(chan *CallBackController, 5000), poolSize: 20, } handler.start() return handler } func (h *CallBackControllerHandler) start() { for i := 0; i < h.poolSize; i++ { go func() { for { select { case controller := <-h.controllerCh: controller.doCallbackLog() } } }() } } func Send(controller *CallBackController) { if callBackControllerHandler == nil { once.Do(func() { callBackControllerHandler = NewCallBackControllerHandler() }) } callBackControllerHandler.controllerCh <- controller }