golang中rpc

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

cpp 复制代码
Server有多种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
cpp 复制代码
fmt.Println("等待客户端连接")
conn, err := listener.Accept()
if err != nil {
	log.Fatal("Accept error:", err)
}
fmt.Println("服务已经启动")
rpc.ServeConn(conn)

问题拨号的方式rpc.Dial("tcp","ip")

相关推荐
LDR0064 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术4 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript
码云数智-园园4 天前
C++20 Modules 模块详解
java·开发语言·spring
swordbob4 天前
NIO的channel中什么是 fd(File Descriptor,文件描述符)
java·开发语言·nio
源分享4 天前
Java线程同步的多种实现方法(非常详细)
java·开发语言·jvm
Luminous.4 天前
C语言--day30
c语言·开发语言
何以解忧,唯有..4 天前
Go语言循环语句详解:for、range与循环控制
开发语言·算法·golang
謓泽4 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
云水一下4 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
飞天狗1114 天前
零基础JavaWeb入门——第五课第二小节:九大内置对象 · 第2个:response(响应对象)
java·开发语言