Go网络编程-RPC程序设计
package main
import (
"errors"
"log"
"net"
"net/rpc"
)
// 定义RPC服务的接口
type ExampleServiceInterface interface {
ExampleServiceMethod(args *ExampleServiceArgs, reply *ExampleServiceReply) error
}
// 定义RPC服务的参数
type ExampleServiceArgs struct {
Param1 string
Param2 int
}
// 定义RPC服务的返回值
type ExampleServiceReply struct {
Result string
}
// 实现RPC服务的具体方法
func (s *ExampleService) ExampleServiceMethod(args *ExampleServiceArgs, reply *ExampleServiceReply) error {
// 这里可以添加具体的业务逻辑处理
if args.Param1 == "" {
return errors.New("param1 is empty")
}
reply.Result = "Processed " + args.Param1
return nil
}
func main() {
// 创建RPC服务对象
service := new(ExampleService)
// 注册RPC服务
err := rpc.Register(service)
if err != nil {
log.Fatal("注册失败: ", err)
}
// 监听TCP端口
listener, err := net.Listen("tcp", "localhost:1234")
if err != nil {
log.Fatal("监听端口失败: ", err)
}
defer listener.Close()
log.Println("RPC服务器启动,等待连接...")
// 循环处理客户端连接
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal("接受连接失败: ", err)
}
go rpc.ServeConn(conn)
}
}
这段代码定义了一个简单的RPC服务,包括服务接口、参数和返回值的结构体,以及服务方法的具体实现。然后,它创建了服务对象,注册到RPC系统,并开始在指定的TCP端口上监听连接。对于每个连接,它会创建一个新的goroutine来服务该连接上的RPC请求。
评论已关闭