Go言語でXMLRPCサーバーのメモ

関連 : Pythonでxmlrpc - brainstorm


以前pythonで書いたのと同じ、日付けを返すだけのサーバーをgoで書いてみる。

divan/gorilla-xmlrpcを使用

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