Goridge 是一个高性能的 PHP-to-Golang 编解码器库,可以在本地 PHP sockets
和Golang net/rpc
包上工作。该库允许从 PHP 调用 Go 服务方法,支持结构,和字节处理。
服务端
package main
import (
"fmt"
"github.com/spiral/goridge"
"net"
"net/rpc"
)
type App struct{}
func (s *App) Hi(name string, r *string) error {
*r = fmt.Sprintf("Hello, %s!", name)
return nil
}
func main() {
ln, err := net.Listen("tcp", ":6001")
if err != nil {
panic(err)
}
rpc.Register(new(App))
for {
conn, err := ln.Accept()
if err != nil {
continue
}
go rpc.ServeCodec(goridge.NewCodec(conn))
}
}
php 调用
composer require spiral/goridge
<?php
use Spiral\Goridge;
require "vendor/autoload.php";
$rpc = new Goridge\RPC(new Goridge\SocketRelay("127.0.0.1", 6001));
echo $rpc->call("App.Hi", "Antony");