Golang简易版RPC实现

简介: Golang简易版RPC实现

server

package main
import (
  "fmt"
  "net"
)
func Hello(name string) string {
  return "HelloWorld" + name
}
func main() {
  listener, err := net.Listen("tcp4", "127.0.0.1:6872")
  if err != nil {
    fmt.Println("Listen err:", err)
  }
  conn, err := listener.Accept()
  if err != nil {
    fmt.Println("Accept err:", err)
  }
  defer conn.Close()
  funcMap := make(map[string]func(string) string)
  funcMap["Hello"] = Hello
  buf := make([]byte, 1024)
  n, err := conn.Read(buf)
  if err != nil {
    fmt.Println("Read err:", err)
  }
  funcName := string(buf[:n])
  n, err = conn.Read(buf)
  if err != nil {
    fmt.Println("Read err:", err)
  }
  funcArgs := string(buf[:n])
  function := funcMap[string(funcName)]
  result := function(string(funcArgs))
  conn.Write([]byte(result))
}

client

package main
import (
  "fmt"
  "net"
  "time"
)
func main(){
  conn,err:=net.Dial("tcp4", "127.0.0.1:6872")
  if err != nil {
    fmt.Println("Dial err:", err)
  }
  conn.Write([]byte("Hello"))
  time.Sleep(1*time.Second)
  conn.Write([]byte("wxf"))
  buf := make([]byte, 1024)
  n, err := conn.Read(buf)
  if err != nil {
    fmt.Println("Read err:", err)
  }
  fmt.Println(string(buf[:n]))
}


目录
相关文章
|
Go 数据库
Golang 语言编写 gRPC 实战项目
Golang 语言编写 gRPC 实战项目
135 0
|
编解码 JSON 网络协议
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
Golang 语言使用标准库 net/rpc/jsonrpc 包跨语言远程调用
115 0
|
JSON 自然语言处理 编译器
Golang 语言 gRPC 到底是什么?
Golang 语言 gRPC 到底是什么?
81 0
|
2月前
|
Go API
Golang语言开发注意事项
这篇文章总结了Go语言开发中的注意事项,包括语法细节、注释使用、代码风格、API文档的利用以及如何使用godoc工具来生成文档。
39 2
|
3月前
|
网络协议 Go 网络安全
[golang]简单的文件上传下载
[golang]简单的文件上传下载
|
3月前
|
人工智能 安全 Go
Golang 搭建 WebSocket 应用(八) - 完整代码
Golang 搭建 WebSocket 应用(八) - 完整代码
40 0
|
5月前
|
移动开发 Go
golang bufio包怎么用?
`bufio` 是 Go 语言中用于提高 I/O 性能的包,它通过使用缓冲区减少对低效磁盘 I/O 操作的调用。简而言之,`bufio` 提供带缓冲的读写功能,减少读取或写入文件时的系统调用次数,从而提升程序性能。
|
自然语言处理 编译器 Go
Golang 语言 gRPC 怎么使用?
Golang 语言 gRPC 怎么使用?
59 0
|
XML 编译器 Go
十分钟学会Golang开发gRPC服务1
十分钟学会Golang开发gRPC服务1
88 0
|
6月前
|
Go
golang安装protoc和gRPC步骤
golang安装protoc和gRPC步骤
140 0