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")

相关推荐
郝学胜-神的一滴19 分钟前
深入探索 C++ 元组:从基础到高级应用
开发语言·c++·stl·软件工程
I'm a winner19 分钟前
第七章:AI进阶之------输入与输出函数(一)
开发语言·人工智能·python·深度学习·神经网络·microsoft·机器学习
木心操作27 分钟前
js生成excel表格进阶版
开发语言·javascript·ecmascript
听情歌落俗40 分钟前
MATLAB3-1变量-台大郭彦甫
开发语言·笔记·算法·matlab·矩阵
zhangfeng11331 小时前
在 R 语言里,`$` 只有一个作用 按名字提取“列表型”对象里的单个元素 对象 $ 名字
开发语言·windows·r语言
希望20171 小时前
Golang | http/server & Gin框架简述
http·golang·gin
文弱书生6562 小时前
5.后台运行设置和包设计与实现
服务器·开发语言·c#
编码浪子2 小时前
趣味学RUST基础篇(异步补充)
开发语言·后端·rust
songroom2 小时前
Rust : 关于Deref
开发语言·后端·rust
qq_401700412 小时前
QT子线程与GUI线程安全交互
开发语言·qt