不一样语言之间的通讯方式有不少种,这里我介绍一种最简单通讯方式,json-rpc。php
Golang自带json-rpc包,使用起来十分简单,示例以下,提供一个简单echo server。golang
package main import ( "fmt" "net" "net/rpc" "net/rpc/jsonrpc" ) type Serve struct { } func (s *Serve) Echo(a *int, r *int) error { *r = 1 return nil } func main() { tcpAddr, err := net.ResolveTCPAddr("tcp", ":9001"); if err != nil { fmt.Println(err) return } l, err := net.ListenTCP("tcp", tcpAddr) if err != nil { fmt.Println(err) return } serve := &Serve{} rpc.Register(serve) for { conn, err := l.Accept() if err != nil { fmt.Println(err) continue } go jsonrpc.ServeConn(conn) } }
php 客户端代码,示例以下。json
$conn = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if (!$conn) { return FALSE; } socket_set_option($conn, SOL_SOCKET, SO_SNDTIMEO, array( "sec" => 0, "usec" => 50000 )); $result = socket_connect($conn, '127.0.0.1', 9001); $s = time(); $w = ['id' => time(), 'params' => [1], 'method' => 'Serve.Echo']; socket_write($conn, json_encode($w)); $r = socket_read($conn, 1024); socket_close($conn); echo $r;
就这样。架构
更多架构、PHP、GO相关踩坑实践技巧请关注个人公众号:PHP架构师socket