• HTTP上的RPC


    1. Go语言内在的RPC框架已经支持在HTTP协议上提供RPC服务。但是框架的HTTP服务同样采用了内置的Gob协议,并且没有提供采用其他协议的接口,因此从其他语言依然无法访问,在前面的例子中,我们已经实现了在TCP协议之上运行jsonrpc服务,并且通过nc命令行工具成功实现了RPC方法调用。现在我们尝试在HTTP协议上提供jsonrpc服务。
    2. 新的RPC服务其实就是一个类似RESET规范的接口,接收请求并采用相应处理流程:
    package main
    
    import (
    	"io"
    	"net/http"
    	"net/rpc"
    	"net/rpc/jsonrpc"
    )
    
    func main(){
    	rpc.RegisterName("HelloService", new(HelloService))
    	http.HandleFunc("/jsonrpc", func(w http.ResponseWriter, r *http.Request){
    		var conn io.ReadWriteCloser = struct {
    			io.Writer
    			io.ReadCloser
    		}{
    			ReadCloser: r.Body,
    			Writer: w,
    		}
    		
    		rpc.ServeRequest(jsonrpc.NewServerCodec(conn))
    	})
    	
    	http.ListenAndServe(":1234", nil)
    }
    
    
    1. RPC的服务架构假设在/jsonrpc路径,在处理函数中基于http.ReponseWriter和http.Request类型的参数构造一个io.ReadWriteCloser类型的conn通道。然后基于conn构建针对服务器端的JSON编码解码器。最后通过rpc.ServeRequest()函数为每次请求处理一次RPC方法的调用。
      模拟一次RPC调用的过程就是向该链接发送一个JSON字符串:
      $ curl localhost:1234/jsonrpc -X POST --data '{"method":"HelloService.Hello", "params":["hello"], "id":0}'
      返回的结果依然是JSON字符串:
      {"id":0, "result":"hello:hello", "error":null}
      这样就可以很方便地从不同语言中访问RPC服务了。
  • 相关阅读:
    npm start报错
    npm install 错误
    vue父子组件间传值
    vue-devtools安装过程的坑
    用js进行排序
    筛选表格数据
    基于ElementUI封装可复用的表格组件
    小程序头部滑动切换
    DisneyDiffuse解析
    基于URP的ScreenSpaceDecal的实现(其实和URP没啥关系)
  • 原文地址:https://www.cnblogs.com/pangqianjin/p/14616233.html
Copyright © 2020-2023  润新知