gearman-go/example/worker.go

62 lines
1.5 KiB
Go
Raw Normal View History

2011-05-18 20:24:59 +08:00
package main
import (
"bitbucket.org/mikespook/gearman-go/gearman"
"bitbucket.org/mikespook/gearman-go/gearman/worker"
2012-04-09 09:26:06 +08:00
"bitbucket.org/mikespook/golib/signal"
"os"
"fmt"
"log"
"strings"
2011-05-18 20:24:59 +08:00
)
func ToUpper(job *worker.WorkerJob) ([]byte, error) {
data := []byte(strings.ToUpper(string(job.Data)))
return data, nil
2011-05-18 20:24:59 +08:00
}
func main() {
w := worker.New(worker.Unlimit)
w.ErrFunc = func(e error) {
log.Println(e)
}
w.AddServer("127.0.0.1:4730")
w.AddFunction("ToUpper", ToUpper, 0)
w.AddFunction("ToUpperTimeOut5", ToUpper, 5)
2011-05-18 20:24:59 +08:00
// Catch the interrupt to exit the working loop.
2012-04-09 09:26:06 +08:00
sh := signal.NewHandler()
sh.Bind(os.Interrupt, func() bool {
w.Close()
return true
2012-04-09 09:26:06 +08:00
})
go sh.Loop()
go func() {
log.Println("start worker")
for {
print("cmd: ")
var str string
fmt.Scan(&str)
switch str {
case "echo":
w.Echo([]byte("Hello world!"))
var job *worker.WorkerJob
for job = <-w.JobQueue; job.DataType != gearman.ECHO_RES; job = <-w.JobQueue {
log.Println(job)
}
log.Println(string(job.Data))
case "quit":
os.Exit(0)
return
case "result":
job := <-w.JobQueue
log.Println(string(job.Data))
default:
log.Println("Unknown command")
}
}
}()
w.Work()
2011-05-18 20:24:59 +08:00
}