研究本地服务系列文章:
今天下载 yakit 试用了一下,颜值非常高,功能也很强大:
撇到左上角的 127.0.0.1:49024
引起了巴斯的注意。
yakit软件大致架构为 yak engine 和 yakit gui 是分离的,通过 grpc 通信,在macOS下运行 lsof -i tcp:49024
查看占用进程yak
,查看其启动命令为 $HOME/yakit-projects/yak-engine/yak grpc --port 49024
。
去github 逛了下找到了 protobuf 文件: https://github.com/yaklang/yakit/blob/master/app/protos/grpc.proto
看到 rpc Exec(ExecRequest) returns (stream ExecResult);
是用来执行 yaklang 脚本的,感觉有搞头。
简单写个demo 验证一下,能否执行与 yak 通信 :
protoc --go_out=plugins=grpc:. *.proto
生成 bp.gopackage main
import (
"context"
"log"
pb "yakit/ypb"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
const (
host = "127.0.0.1:49024"
)
func main() {
conn, err := grpc.Dial(host,
grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
log.Fatal(err)
}
defer conn.Close()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
yak := pb.NewYakClient(conn)
v, err := yak.Version(ctx, &pb.Empty{})
if err != nil {
log.Fatal(err)
}
log.Printf("version: %s", v.Version)
}
可以本地通信的话没啥限制。