2011-05-18 20:24:59 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2012-03-26 13:32:59 +08:00
|
|
|
"bitbucket.org/mikespook/gearman-go/gearman"
|
|
|
|
"bitbucket.org/mikespook/gearman-go/gearman/worker"
|
2012-03-27 22:48:03 +08:00
|
|
|
"bitbucket.org/mikespook/golib/util"
|
2012-03-26 13:32:59 +08:00
|
|
|
"fmt"
|
|
|
|
"log"
|
|
|
|
"strings"
|
2011-05-18 20:24:59 +08:00
|
|
|
)
|
|
|
|
|
2012-03-26 13:32: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() {
|
2012-03-27 22:48:03 +08:00
|
|
|
w := worker.New()
|
2012-03-26 13:32:59 +08:00
|
|
|
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
|
|
|
|
2012-03-27 22:48:03 +08:00
|
|
|
// Catch the interrupt to exit the working loop.
|
|
|
|
sh := util.NewSignalHandler(func() bool {
|
|
|
|
w.Close()
|
|
|
|
return true
|
|
|
|
}, func() bool {return true})
|
|
|
|
go sh.Loop()
|
|
|
|
|
2012-03-26 13:32:59 +08:00
|
|
|
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":
|
|
|
|
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
|
|
|
}
|