库下载:
Go:https://github.com/hprose/hprose-golang
Delphi:https://github.com/hprose/hprose-delphi
感谢creantan、虫虫 大神指导
// 服务端(因为Delphi 版 hprose不支持TCP,所以这里用http了)
package main
import (
"github.com/astaxie/beego"
"fmt"
"github.com/hprose/hprose-golang/rpc"
)
func hello(name string) string {
fmt.Println("call1 from client...")
return "Hello " + name + "!"
}
func add(a, b int) int {
fmt.Println("call1 add() from client...")
return a + b
}
type HelloService struct {
Hello func(func(string, error), string)
Add func(func(int, error), int, int)
}
func (h *HelloService)hello(name string) string {
fmt.Println("call hello() from client...")
return "Hello " + name + "!"
}
func (h *HelloService)add(a, b int) int {
fmt.Println("call add() from client...")
return a + b
}
func main() {
service := rpc.NewHTTPService()
helloService := HelloService{}
service.AddFunction("hello", helloService.hello)
service.AddFunction("add", helloService.add)
beego.Handler("/", service)
beego.Run(":1234")
}// Delphi客户端
procedure TForm1.btn1Click(Sender: TObject);
var
client: THproseHttpClient;
begin
client := THproseHttpClient(VarToObj(THproseHttpClient.New('http://localhost:1234/')));
try
ShowMessage(client.Invoke('add', [100, 200]));
ShowMessage(client.Invoke('hello', ['PiaoYun']));
finally
client.Free;
end;
end;// Go客户端
package main
import (
"fmt"
"time"
"github.com/hprose/hprose-golang/rpc"
)
type SubService struct {
Hello2 func(func(string), string) `name:"hello"` // 相当于其他语言的函数重载
}
type HelloService struct {
SubService
Hello func(func(string, error), string)
Add func(func(int, error), int, int)
}
func main() {
//client := rpc.NewTCPClient("tcp://localhost:1234/")
client := rpc.NewHTTPClient("http://localhost:1234/")
var helloService *HelloService
client.UseService(&helloService)
helloService.Hello(func(result string, err error) {
fmt.Println(result, err)
}, "PiaoYun")
helloService.Hello2(func(result string) {
fmt.Println(result)
}, "PiaoYun")
helloService.Add(func(result int, err error) {
fmt.Printf("add result = %d\n", result)
}, 10, 20)
time.Sleep(time.Second * 2)
}
发表评论