c客户端和服务端处理方式要一致否则客户端访问不了
rpc.RegisterName("HelloService", new(HelloService))
rpc.HandleHTTP() //客户端使用rpc.DialHTTP
if err := http.ListenAndServe("127.0.0.1:8080", nil); err != nil {
log.Fatal("serve error:", err)
}
上面的的rpc服务的启动是http工具封装后的等价于以下方式:
rpc.RegisterName("HelloService", new(HelloService)) rpc.HandleHTTP() //客户端使用rpc.DialHTTP listener, err := net.Listen("tcp", "127.0.0.1:8080") if err != nil { log.Fatal("ListenTCP error:", err) } fmt.Println("服务已启动") http.Serve(listener, nil)
他们的底层都是net网络包的功能。
注意的是当服务端使用rpc.HandleHTTP()方式处理时客户但必须使用rpc.DialHTTP方式拨号,用rpc.Dial无法远程访问,
Server有多种Socket监听的方式:
`Accept`用来处理一个监听器,一直在监听客户端的连接,客户端断开服务端停止,如下使zh
cppServer有多种Socket监听的方式: func (server *Server) Accept(lis net.Listener) func (server *Server) HandleHTTP(rpcPath, debugPath string) func (server *Server) ServeCodec(codec ServerCodec) func (server *Server) ServeConn(conn io.ReadWriteCloser) func (server *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) func (server *Server) ServeRequest(codec ServerCodec) error
cppfmt.Println("等待客户端连接") conn, err := listener.Accept() if err != nil { log.Fatal("Accept error:", err) } fmt.Println("服务已经启动") rpc.ServeConn(conn)
问题拨号的方式rpc.Dial("tcp","ip")