1 基本RPC
1.1 server.go
这里使用net/rpc
官包,只提供一个求和服务,监听8888
端口
package main
import (
"log"
"net"
"net/rpc"
)
type Math struct {}
type MathRequest struct{
A int
B int
}
func (p *Math) Sum(request MathRequest, response *int) error {
*response = request.A + request.B
return nil
}
func main(){
rpc.RegisterName("Sum", new(Math))
listener, err := net.Listen("tcp", "0.0.0.0:8888")
if(err != nil){
log.Fatal("ListenTCP error:", err)
}
for {
socket, err := listener.Accept()
if(err != nil){
log.Fatal("Accept error:", err)
}
go rpc.ServeConn(socket)
}
}
1.2 client.go
package main
import (
"net/rpc"
"log"
"fmt"
)
type MathRequest struct{
A int
B int
}
func main(){
client, err := rpc.Dial("tcp", "192.168.27.128:8888")
if(err != nil){
log.Fatal("Dial failed", err)
}
var sum int
err = client.Call("Sum.Sum", MathRequest{1, 5} ,&sum)
if(err != nil){
log.Fatal("Call failed", err)
}
fmt.Println("sum:", sum)//sum: 6
}
2 Docker
部署服务端
2.1 编写Dockerfile
WORKDIR $GOPATH/mydata/server
COPY . $GOPATH/mydata/server
RUN go build server.go
EXPOSE 8888
ENTRYPOINT ./server
2.2 docker build
docker build -t docker-go-rpc-server:0.1 .
Sending build context to Docker daemon 3.584kB
Step 1/6 : FROM golang:latest
---> 3abbb425095a
Step 2/6 : WORKDIR $GOPATH/mydata/server
---> Using cache
---> b7c327a56810
Step 3/6 : COPY . $GOPATH/mydata/server
---> fa9218a83c0b
Step 4/6 : RUN go build server.go
---> Running in d27a7d174c07
Removing intermediate container d27a7d174c07
---> 949e84a5fec2
Step 5/6 : EXPOSE 8888
---> Running in 0cd1b35f0fa7
Removing intermediate container 0cd1b35f0fa7
---> 7535aba18289
Step 6/6 : ENTRYPOINT ["./server"]
---> Running in 863fada04827
Removing intermediate container 863fada04827
---> a868c6c4bd67
Successfully built a868c6c4bd67
Successfully tagged docker-go-rpc-server:0.1
2.3 docker run
docker run -d -p 8888:8888 --name migo docker-go-rpc-server:0.1
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6d8ba7ff331e docker-go-rpc-server:0.1 "./server" 8 seconds ago Up 7 seconds 0.0.0.0:8888->8888/tcp, :::8888->8888/tcp migo