[GO] goを使用して独自のrpcフレームワークを実装する

import(
	"bufio" 
	"log" 
	"net / rpc" 
	"os" 

type Reply struct { 
	Data string 
} 

func main(){ 
	client、err:= rpc.Dial( "tcp"、 "localhost:12345")
	if err != nil { 
		log.Fatal(err)
	} 

	in:= bufio.NewReader(os.Stdin)
	for { 
		line、_、err:= in.ReadLine()
		if err!= nil { 
			log.Fatal(err)
		} 
		var返信返信
		err = client.Call( "Listener.GetLine"、line、&reply)
		if err!= nil { 
			log.Fatal(err)
		} 
		log.Printf( "Reply:%v、Data:%v"、reply、reply 。データ) 
	} 
}

上記はrpcフレームワークコードのクライアント実装であり、以下はサーバー実装です。

import(
	"fmt" 
	"log" 
	"net" 
	"net / rpc" 

type Listener int 

type Reply struct { 
	Data string 
} 

func(l * Listener)GetLine(line [] byte、reply * Reply)error { 
	rv:= string (line)
	fmt.Printf( "Receive:%v \ n"、rv)
	* reply = Reply {rv} 
	return nil 
} 

func main(){ 
	addy、err:= net.ResolveTCPAddr( "tcp"、 "0.0.0.0 :12345 ")
	if err!= nil { 
		log.Fatal(err)
	} 

	インバウンド、err:= net.ListenTCP(" tcp "、addy)
	if err!= nil { 
		log.Fatal(err)
	} 

	listener:= new(リスナー)
	rpc。登録(リスナー) 
	rpc。Accept(inbound) 
}

  

 追加のパッケージをダウンロードする必要はありません。これは、goに付属するrpcフレームワークです。欠点は、go言語のプログラム間でしか通信できないことです。

おすすめ

転載: www.cnblogs.com/sbhyc/p/12684669.html
おすすめ