您当前的位置:学无止境 > Golang和php通过rpc实现通信,实现简单的c/s架构网站首页学无止境
Golang和php通过rpc实现通信,实现简单的c/s架构
发布时间:2021-04-16 15:18:43编辑:孙建超查看次数:732
服务端
server.go
package main import ( "log" "net/http" "net/rpc" ) // 服务端,求矩形面积和周长 // 申明矩形对象 type Rect struct { } // 声明参数结构体,字段首字母大写 type Params struct{ Width int Height int } // 定义求矩形面积的方法 func (r *Rect)Area(p Params,ret *int)(err error) { *ret = p.Width * p.Height return nil } // 定义求矩形周长的方法 func (r *Rect)Perimeter(p Params,ret *int) (err error) { *ret = (p.Width + p.Height) * 2 return nil } func main() { // 注册服务 rect := new(Rect) rpc.Register(rect) // 把服务注册到http协议上 rpc.HandleHTTP() // 监听服务,等待客户端调用求面积和周长的方法 err := http.ListenAndServe("127.0.0.1:8080", nil) if err != nil{ log.Fatal(err) return } }
运行
go run server.go
客户端
client.go
package main import ( "fmt" "log" "net/rpc" ) type Params struct { Width int Height int } // 调用服务 func main() { // 连接远程的rpc服务 client, err := rpc.DialHTTP("tcp", "127.0.0.1:8080") if err != nil{ log.Fatal(err) return } // 调用远程的方法 // 定义接收服务端传回来的计算结果的变量 ret := 0 // 求面积 err = client.Call("Rect.Area", Params{ Width: 50, Height: 100, }, &ret) if err != nil{ log.Fatal(err) return } fmt.Println("面积:",ret) // 求周长 err = client.Call("Rect.Perimeter", Params{ Width: 50, Height: 100, }, &ret) if err != nil{ log.Fatal(err) return } fmt.Println("周长:",ret) }
运行
go run client.go
关键字词:golang,RPC,go,微服务
评论: