您当前的位置:学无止境 > Golang和php通过rpc实现通信,实现简单的c/s架构网站首页学无止境
Golang和php通过rpc实现通信,实现简单的c/s架构
发布时间:2021-04-16 15:18:43编辑:孙建超查看次数:751
服务端
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,微服务
评论:
