Go言語でXMLRPCサーバーのメモ
関連 : Pythonでxmlrpc - brainstorm
以前pythonで書いたのと同じ、日付けを返すだけのサーバーをgoで書いてみる。
package main import ( "log" "net/http" "time" "github.com/divan/gorilla-xmlrpc/xml" "github.com/gorilla/rpc" ) type TimeArgs struct{} type TimeReply struct { Time time.Time } type TimeService struct{} func (h *TimeService) Now(r *http.Request, args *TimeArgs, reply *TimeReply) error { reply.Time = time.Now() return nil } func main() { RPC := rpc.NewServer() xmlrpcCodec := xml.NewCodec() RPC.RegisterCodec(xmlrpcCodec, "text/xml") RPC.RegisterService(new(TimeService), "") http.Handle("/", RPC) log.Println("Starting XML-RPC server on localhost:8000") err := http.ListenAndServe(":8000", nil) if err != nil { log.Fatal("ListenAndServer: ", err) } }
pythonによるクライアントコード
# coding=utf-8 import xmlrpclib import datetime proxy = xmlrpclib.ServerProxy("http://localhost:8000/") now = proxy.TimeService.Now() converted = datetime.datetime.strptime(now.value, "%Y%m%dT%H:%M:%S") print "now: %s" % converted.strftime("%d.%m.%Y, %H:%M")
呼び出し結果
now: 17.03.2014, 21:07