成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

手把手教你用Golang擼Rpc

開發(fā) 架構(gòu)
微服務中很重要的一個內(nèi)容就是「RPC」遠程過程調(diào)用(Remote Procedure Call,縮寫為 RPC)是一個計算機通信協(xié)議,他的主要作用是「允許運行于一臺計算機的程序調(diào)用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程」。

引言?

"微服務"這個概念想必不用我說大家都知道,就算沒接觸過也聽說過。簡單來說就是以前系統(tǒng)中的,用戶,搜索,內(nèi)容,等等模塊都在一起,這樣會導致代碼「越來越冗余,越來越難維護」,所以往往需要拆分這些服務,微服務在拆分的時候,會根據(jù)業(yè)務功能模塊把一個單體的應用拆分成許多個獨立的項目,每個項目完成一部分的業(yè)務功能,然后獨立開發(fā)和部署。這些獨立的項目就成為一個微服務。進而構(gòu)成一個「服務集群」。看下面兩張圖可能會對微服務的概念更加直觀。

單體服務

圖片

單體服務

微服務

圖片

微服務

RPC介紹?

微服務中很重要的一個內(nèi)容就是「RPC」遠程過程調(diào)用(Remote Procedure Call,縮寫為 RPC)是一個計算機通信協(xié)議,他的主要作用是「允許運行于一臺計算機的程序調(diào)用另一臺計算機的子程序,而程序員無需額外地為這個交互作用編程」。

那么RPC是如何實現(xiàn)的呢?今天咱們就以golang為工具,給大家實現(xiàn)一個簡單的用rpc輸出helloWorld。

RPC實現(xiàn)步驟?

其實RPC的實現(xiàn)和網(wǎng)絡編程有點像,A服務需要遠程調(diào)用B服務的某個方法,在這種情況下我們就把B服務稱為「服務端」,A稱為「客戶端」

圖片

具體實現(xiàn)步驟如下圖:

圖片

RPC實現(xiàn)步驟

服務端?

1、注冊服務對象,綁定類方法

rpc.ResisterName("服務名","回調(diào)對象")
ResisterName函數(shù)解釋
func RegisterName(name string, rcvr interface{}) error
//參數(shù)解釋
//name 服務名(自己隨便取),字符串類型
//rcvr 對應的RPC對象,該對象綁定的方法需要滿足如下條件
1)方法必須是導出的(包外可見),在golang中的體現(xiàn)為,方法名首字母大寫

2)方法必須有兩個參數(shù),都是導出類型,內(nèi)建類型

3) 方法的第二個參數(shù)(也就是客戶端調(diào)用遠程函數(shù)中的傳出參數(shù)),必須指針(傳出參數(shù))

4) 該方法只有一個返回值,就是error接口類型的返回值
下面我們針對參數(shù)2舉個例子,比如下面這個方法TestMethod 就是符合條件的。
type Test struct{
}
//這是符合RegisterName的參數(shù)2的方法名
func (this *Test) TestMethod(name string, resp *string)error{
return nil
}

rpc.RegisterName("test", new(Test)) //注冊rpc服務對象

2、創(chuàng)建監(jiān)聽器

listener, err := net.Listen()

3、啟動監(jiān)聽,建立鏈接

conn, err := listener.Accept()

4、將鏈接綁定RPC服務

rpc.ServerConn(conn)
ServerConn函數(shù)解釋
func (server *Server) ServeConn(conn io.ReadWriteCloser)
//參數(shù)conn為成功建立好連接的socket,也就是前面的conn

客戶端?

1、用RPC連接服務器(服務端)

conn, err := rpc.Dail()

2、調(diào)用遠程函數(shù)

conn.Call("服務名.方法名", "傳入?yún)?shù)", "傳出參數(shù)")
func (client *Client) Call(serviceMethod string, args interface{}, reply interface{}) error
//參數(shù)含義
//serviceMethod "服務名"."方法名"
//args "傳入?yún)?shù)" 調(diào)用方法需要的參數(shù)
//reply "傳出參數(shù)" 定義一個變量,對變量名取地址 &變量,完成傳參

代碼示例?

服務端代碼?

server.go:

package main
import (
"fmt"
"net"
"net/rpc"
)
type Hello struct {
}
func (this *Hello) HelloWorld(name string, resp *string) (err error) {
*resp = name + "您好!"
return err
}
func main() {
//注冊rpc服務,指定對象和方法
err := rpc.RegisterName("hello", new(Hello))
if err != nil {
fmt.Println("注冊 err:", err)
return
}
//設置監(jiān)聽
listener, err := net.Listen("tcp", "127.0.0.1:8088")
if err != nil {
fmt.Println("listen err:", err)
return
}
defer listener.Close()
//建立連接
conn, err := listener.Accept()
if err != nil {
fmt.Println("accept err:", err)
return
}
defer conn.Close()
//綁定服務
rpc.ServeConn(conn)
}

客戶端代碼?

client.go:

package main

import (
"fmt"
"net/rpc"
)
func main() {
//用rpc鏈接服務器
conn, err := rpc.Dial("tcp", "127.0.0.1:8088")
if err != nil {
fmt.Println("Dial err:", err)
return
}
defer conn.Close()
var resp *string
conn.Call("hello.HelloWorld", "小飯", &resp)
fmt.Println(*resp)
}
責任編輯:姜華 來源: 程序員小飯
相關推薦

2021-08-09 13:31:25

PythonExcel代碼

2022-08-04 10:39:23

Jenkins集成CD

2011-03-28 16:14:38

jQuery

2021-02-04 09:00:57

SQLDjango原生

2021-02-06 14:55:05

大數(shù)據(jù)pandas數(shù)據(jù)分析

2009-04-22 09:17:19

LINQSQL基礎

2020-03-08 22:06:16

Python數(shù)據(jù)IP

2012-01-11 13:40:35

移動應用云服務

2021-08-02 23:15:20

Pandas數(shù)據(jù)采集

2021-02-02 13:31:35

Pycharm系統(tǒng)技巧Python

2021-12-11 20:20:19

Python算法線性

2021-05-10 06:48:11

Python騰訊招聘

2021-01-21 09:10:29

ECharts柱狀圖大數(shù)據(jù)

2021-01-08 10:32:24

Charts折線圖數(shù)據(jù)可視化

2021-01-30 10:37:18

ScrapyGerapy網(wǎng)絡爬蟲

2021-05-17 21:30:06

Python求均值中值

2017-10-29 21:43:25

人臉識別

2009-08-27 18:10:58

PHP繪制3D圖形

2021-06-23 07:16:06

buildroot Linux內(nèi)核根文件系統(tǒng)

2021-01-27 21:55:13

代碼參數(shù)值ECharts
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产欧美日韩在线观看 | 日韩欧美中文在线 | 91精品欧美久久久久久久 | 久久精品亚洲精品国产欧美 | 影视先锋av资源噜噜 | jav成人av免费播放 | 一区二区三区在线观看视频 | 国产一区二区三区久久久久久久久 | 男女污网站 | 午夜精品一区二区三区在线视频 | 午夜一区 | 成人久久18免费网站 | 久久久久久免费毛片精品 | 国产 日韩 欧美 中文 在线播放 | 久久久久久亚洲精品 | 91精品国产91久久久久久最新 | 午夜天堂精品久久久久 | 久久免费国产 | 国产成人午夜高潮毛片 | 亚洲国产精品99久久久久久久久 | 日韩欧美高清dvd碟片 | 国产成人网 | 欧美久久一区二区三区 | 午夜精品久久久久久久久久久久 | 久久精品视频网站 | 久久精品久久久 | 免费看黄色视屏 | 人人叉| 亚洲成人精品久久久 | 在线播放亚洲 | www亚洲精品 | 日本久久www成人免 成人久久久久 | 成人av网站在线观看 | 国产精品毛片一区二区在线看 | 国产精品片aa在线观看 | 日韩免费 | 日韩三级电影一区二区 | 精品久久久久久久久久久院品网 | 在线观看精品 | 91麻豆精品国产91久久久更新资源速度超快 | www.久久 |