2
go微服务开发入门
source link: https://studygolang.com/articles/34548?fr=sidebar
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
go微服务开发入门
voidFan · 大约12小时之前 · 112 次点击 · 预计阅读时间 4 分钟 · 大约8小时之前 开始浏览rpc基础
- 服务端监听一个端口
nc -l 127.0.0.1 8800 - 往服务器发送数据(返回服务器响应数据)
echo -e '{"method":"hello.HelloWorld","params":["TTTT"],"id":0}' | nc 127.0.0.1 8880
golang 自带rpc通信(gob)
服务端代码
package main
import (
"fmt"
"net"
"net/rpc"
)
type Hello struct {
}
func (h *Hello) HelloWorld(name string, resp *string) error {
*resp = name + name
return nil
}
func RpcHelloServerMain() {
// 1、注册RPC服务,绑定对象方法
err := rpc.RegisterName("hello", new(Hello))
if err != nil {
fmt.Println("register name is err :", err)
return
}
// 2、设置监听
listen, err := net.Listen("tcp", "127.0.0.1:8880")
if err != nil {
fmt.Println("net listen err :", err)
return
}
defer listen.Close()
fmt.Println("start listen")
// 3、建立连接
conn, err := listen.Accept()
if err != nil {
fmt.Println("Accept() err :", err)
return
}
defer conn.Close()
fmt.Println("connected!")
// 4、绑定服务
rpc.ServeConn(conn)
}
客户端代码
package main
import (
"fmt"
"net/rpc"
)
func main() {
// 1、用RPC链接服务器
conn, err := rpc.Dial("tcp", "127.0.0.1:8080")
if err := nil {
fmt.Println("dial localhost:8080 error :", err)
return
}
defer conn.close()
// 2、调用远程函数
var reply string //接收返回值。。。。
err = conn.Call("hello.HelloWorld", "hello world ", &reply)
if err != nil {
fmt.Println("call error:", err)
return
}
fmt.Println(reply)
}
golang 自带jsonrpc通信
jsonrpc服务端代码
package main
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type Hello struct {
}
func (h *Hello) HelloWorld(name string, resp *string) error {
*resp = name + name
return nil
}
func RpcHelloServerMain() {
// 1、注册RPC服务,绑定对象方法
err := rpc.RegisterName("hello", new(Hello))
if err != nil {
fmt.Println("register name is err :", err)
return
}
// 2、设置监听
listen, err := net.Listen("tcp", "127.0.0.1:8880")
if err != nil {
fmt.Println("net listen err :", err)
return
}
defer listen.Close()
fmt.Println("start listen")
// 3、建立连接
conn, err := listen.Accept()
if err != nil {
fmt.Println("Accept() err :", err)
return
}
defer conn.Close()
fmt.Println("connected!")
// 4、绑定服务
jsonrpc.ServeConn(conn)
}
jsonrpc客户端代码
package main
import (
"fmt"
"net/rpc/jsonrpc"
)
func main() {
// 1、用RPC链接服务器
conn, err := jsonrpc.Dial("tcp", "127.0.0.1:8080")
if err := nil {
fmt.Println("dial localhost:8080 error :", err)
return
}
defer conn.close()
// 2、调用远程函数
var reply string //接收返回值。。。。
err = conn.Call("hello.HelloWorld", "hello world ", &reply)
if err != nil {
fmt.Println("call error:", err)
return
}
fmt.Println(reply)
}
golang 自带jsonrpc通信(封装)
jsonrpc服务端代码(封装)
package main
import (
"fmt"
"net"
"net/rpc"
"net/rpc/jsonrpc"
)
type MyInterface interface {
HelloWorld(string, *string) error
}
type Hello struct {
}
func (h *Hello) HelloWorld(name string, resp *string) error {
*resp = name + name
return nil
}
func RegisterService(i MyInterface) {
rpc.RegisterName("hello", i)
}
func RpcHelloServerMain() {
// 1、注册RPC服务,绑定对象方法
RegisterService(&Hello{})
// 2、设置监听
listen, err := net.Listen("tcp", "127.0.0.1:8880")
if err != nil {
fmt.Println("net listen err :", err)
return
}
defer listen.Close()
fmt.Println("start listen")
// 3、建立连接
conn, err := listen.Accept()
if err != nil {
fmt.Println("Accept() err :", err)
return
}
defer conn.Close()
fmt.Println("connected!")
// 4、绑定服务
jsonrpc.ServeConn(conn)
}
jsonrpc客户端代码(封装)
package main
import (
"fmt"
"net/rpc/jsonrpc"
)
type MyClient struct {
c *rpc.Client
}
func InitClient(addr string) MyClient{
conn, _ := jsonrpc.Dial("tcp", addr)
return MyClient{
c:conn,
}
}
func (this* MyClient) HelleWorld(a string, b *string) error {
// a是传入参数, b 是传出参数
this.c.Call("hello.HelloWorld", a, b)
return nil
}
func main() {
// 1、用RPC链接服务器
client := InitClient("127.0.0.1:8880")
// 2、调用远程函数
var reply string //接收返回值。。。。
client.HelleWorld("lei lei", &reply)
fmt.Println(reply)
}
golang protobuf rpc通信
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK