這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
RPC(Remote Procedure Call Protocol)——遠端程序呼叫協議,它是一種通過網路從遠端電腦程式上請求服務,而不需要瞭解底層網路技術的協議。
它的工作流程如:
golang 使用 RPC的例子如下:
伺服器端代碼:
這裡暴露了一個RPC介面,一個HTTP介面
package main
import (
"fmt"
"io"
"net"
"net/http"
"net/rpc"
)
type Watcher int
func (w *Watcher) GetInfo(arg int, result *int) error {
*result = 1
return nil
}
func main() {
http.HandleFunc("/ghj1976", Ghj1976Test)
watcher := new(Watcher)
rpc.Register(watcher)
rpc.HandleHTTP()
l, err := net.Listen("tcp", ":1234")
if err != nil {
fmt.Println("監聽失敗,連接埠可能已經被佔用")
}
fmt.Println("正在監聽1234連接埠")
http.Serve(l, nil)
}
func Ghj1976Test(w http.ResponseWriter, r *http.Request) {
io.WriteString(w, "<html><body>ghj1976-123</body></html>")
}
用戶端代碼:
package main
import (
"fmt"
"net/rpc"
)
func main() {
client, err := rpc.DialHTTP("tcp", "127.0.0.1:1234")
if err != nil {
fmt.Println("連結rpc伺服器失敗:", err)
}
var reply int
err = client.Call("Watcher.GetInfo", 1, &reply)
if err != nil {
fmt.Println("調用遠程服務失敗", err)
}
fmt.Println("遠程服務返回結果:", reply)
}
伺服器端代碼執行
用戶端代碼執行
HTTP網頁執行: