下面由laravel教程欄目給大家介紹laravel怎么通過rpc調用golang程序 ,希望對需要的朋友有所幫助!
Golang 服務端
package mainimport ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc")type Goods struct{}//方法(必須是公有方法,且必須是兩個參數)func (g *Goods) GetName(args string , res *string) error { *res = "args=" + args return nil}func main() { //注冊rpc服務,并自定義服務名 err := rpc.RegisterName("Goods",new(Goods)) if err != nil { panic(err.Error()) } //監聽端口,如果監聽所有客戶端則去掉ip listen, err := net.Listen("tcp", "127.0.0.1:7081") if err != nil { panic(err.Error()) } fmt.Println("啟動服務...") for { conn, err := listen.Accept() // 接收客戶端連接請求 if err != nil { continue } go jsonrpc.ServeConn(conn) }}
php 客戶端
public function test(){ $host = '127.0.0.1'; $port = '7081'; $conn = fsockopen($host, $port, $errno, $errstr, 3); if (!$conn) { dd('鏈接失敗'); } $method = 'Goods.GetName'; $params = "我是字符串參數"; $err = fwrite($conn, json_encode(array( 'method' => $method, 'params' => [$params], 'id' => 0, ))."n"); if ($err === false){ dd('寫入數據失敗'); } stream_set_timeout($conn, 0, 30000);//超時配置 $line = fgets($conn); if ($line === false) { dd('獲取響應數據失敗'); } dd(json_decode($line,true));}
返回結果
array:3 [ "id" => 0 "result" => "args=我是字符串參數" "error" => null]
推薦:最新的五個Laravel視頻教程
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦