golang jsonrpc
来源:互联网 发布:js调用dll 编辑:程序博客网 时间:2024/05/16 15:39
//手动抄写一遍,
package mainimport ("fmt""log""net""net/rpc""net/rpc/jsonrpc")type RpcObj struct {Id int `json:"id"` // struct标签, 如果指定,jsonrpc包会在序列化json时,将该聚合字段命名为指定的字符串Name string `json:"name"`}// 需要传输的对象type ReplyObj struct {Ok bool `json:"ok"`Id int `json:"id"`Msg string `json:"msg"`}type ServerHandler struct{}func (serverHandler ServerHandler) GetName(id int, returnObj *RpcObj) error {log.Println("server\t-", "recive GetName call, id:", id)returnObj.Id = idreturnObj.Name = "名称1"return nil}func (serverHandler ServerHandler) SaveName(rpcObj RpcObj, returnObj *ReplyObj) error {log.Println("server\t-", "recive SaveName call, RpcObj:", rpcObj)returnObj.Ok = truereturnObj.Id = rpcObj.IdreturnObj.Msg = "存储成功"return nil}func main() {server := rpc.NewServer()listener, err := net.Listen("tcp", ":8888")if err != nil {log.Fatal("server\t-", "listen error:", err.Error())}defer listener.Close()log.Println("server\t-", "start listion on port 8888")// 新建处理器serverHandler := &ServerHandler{}// 注册处理器server.Register(serverHandler)// 等待并处理链接go func() {for {conn, err := listener.Accept()if err != nil {log.Fatal(err.Error())}// 在goroutine中处理请求// 绑定rpc的编码器,使用http connection新建一个jsonrpc编码器,并将该编码器绑定给http处理器go server.ServeCodec(jsonrpc.NewServerCodec(conn))}}()//clientclient, err := net.DialTimeout("tcp", "localhost:8888", 1000*1000*1000*30) // 30秒超时时间if err != nil {log.Fatal("client\t-", err.Error())}defer client.Close()clientRpc := jsonrpc.NewClient(client)var rpcObj RpcObj// 请求数据,rpcObj对象会被填充clientRpc.Call("ServerHandler.GetName", 1, &rpcObj)// 远程返回的对象var reply ReplyObj// 传给远程服务器的对象参数saveObj := RpcObj{2, "对象2"}// 请求数据clientRpc.Call("ServerHandler.SaveName", saveObj, &reply)fmt.Println(reply.Msg)// Asynchronous calldivCall := clientRpc.Go("ServerHandler.SaveName", saveObj, &reply, nil)replyCall := <-divCall.Done // will be equal to divCallfmt.Println(replyCall.Reply)}
0 0
- golang jsonrpc
- jsonrpc
- JSONrpc
- jsonrpc 规范
- JSONRPC+JSON+Java
- JSONRPC的HelloWorld应用
- android jsonrpc 使用实例
- Jsonrpc项目综述
- jsonrpc python实现
- 电子商务网站JSONRPC应用实例
- vs2008 工程使用jsonrpc 问题
- 利用jsonrpc技术包装uiautomator
- RPC/RMI之三:JSONRPC
- 利用jsonrpc技术包装uiautomator
- Golang
- golang
- golang
- golang
- linux 程序设计常用知识:
- Linux 网络编程——IP 数据报格式详解
- Linux内核源代码情景分析-特殊文件系统/proc-对/proc/self/cwd的访问
- JavaScript权威指南笔记4_数组
- zoj 3598 Spherical Triangle 一道很纯的公式题,经纬线计算球面内角和
- golang jsonrpc
- asp开发出现数据库引擎错误: '80040e14'
- js数组去重
- serialVersionUID作用
- android模拟机联网设置
- sql之left join、right join、inner join的区别
- JavaScript权威指南勘误记录
- 高斯日记
- [NSBundle mainBundle] 详解