当前位置: 首页 > article >正文

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

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

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


http://www.kler.cn/a/395949.html

相关文章:

  • jmeter常用配置元件介绍总结之断言
  • 无人机图传系统介绍——CKESC电调小课堂11.0
  • 全面评估ASPICE标准对汽车软件开发的影响与效果
  • Android Studio | 修改镜像地址为阿里云镜像地址,启动App
  • 【云原生系列--Longhorn的部署】
  • 11.11 机器学习-数据集的获取和划分
  • 深度学习--卷积神经网络
  • 2024年11月系统架构设计师考试真题回顾
  • 性能测试|JMeter接口与性能测试项目
  • PCL 点云拟合 基于夹角约束的Ransac拟合平面
  • 十一、拦截器
  • 【Linux网络编程】简单的UDP网络程序
  • Appium配置2024.11.12
  • 高级前端开发工程师--掌握的技术
  • Java项目实战II基于微信小程序的私家车位共享系统(开发文档+数据库+源码)
  • 讲解C语言浮点型常量的指数表示法
  • 设计模式——策略模式(c++)
  • 【Framework系列】UnityEditor调用外部程序详解
  • 关于写React的一些反思和总结
  • GEE python ——访问谷歌多 PB 的合成孔径雷达图像数据,不受尺寸限制(geesarfetcher安装包)