2025-02-16 10:49:17 +08:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net"
|
|
|
|
"net/rpc"
|
|
|
|
)
|
|
|
|
|
|
|
|
// 实现业务功能
|
|
|
|
// req := &HelloRequest{}
|
|
|
|
// resp := &HelloResponse{}
|
|
|
|
// err := &HelloServiceImpl{}.Hello(req, resp)
|
|
|
|
// net/rpc
|
|
|
|
// 1. 写好的对象, 注册给RPC Server
|
|
|
|
// 2. 再把RPC Server 启动起来
|
|
|
|
type HelloServiceImpl struct {
|
|
|
|
}
|
|
|
|
|
|
|
|
type HelloRequest struct {
|
|
|
|
MyName string `json:"my_name"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type HelloResponse struct {
|
|
|
|
Message string `json:"message"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// HTTP Handler
|
|
|
|
func (h *HelloServiceImpl) Hello(request *HelloRequest, response *HelloResponse) error {
|
2025-02-16 11:09:03 +08:00
|
|
|
response.Message = "hello:" + request.MyName
|
2025-02-16 10:49:17 +08:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
// 1. 把业务 注册给RPC
|
|
|
|
// 2. RPC 业务RPC必须是满足条件的接口: (req any, req any) error
|
|
|
|
// Hello(request *HelloRequest, response *HelloResponse) error
|
|
|
|
if err := rpc.RegisterName("HelloService", &HelloServiceImpl{}); err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
// 启动RPC服务
|
|
|
|
listener, err := net.Listen("tcp", ":1234")
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
defer listener.Close()
|
|
|
|
for {
|
|
|
|
conn, err := listener.Accept()
|
|
|
|
if err != nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
// 用户的net层数据 转交给 rpc框架
|
|
|
|
go rpc.ServeConn(conn)
|
|
|
|
}
|
|
|
|
}
|