环境
go version go1.17.4 linux/amd64
libprotoc 3.6.1
问题
我正在测试Go实现的grpc服务器和客户端
首先,我进行了proto定义,并通过proto命令生成pb代码。我提到了这个解决方案。下面的错误以最小代码打印,以重现我的错误。
错误
$ go test
--- FAIL: TestHello (0.00s)
main_test.go:49: failed to Hello: rpc error: code = Unimplemented desc = method Hello not implemented
FAIL
exit status 1
FAIL github.com/Asuha-a/test/test 0.003s
密码
你好原型
syntax = "proto3";
option go_package = "github.com/Asuha-a/test/pb";
package hello;
service Hello {
rpc Hello (HelloRequest) returns (HelloReply) {}
}
message HelloRequest {
string foo = 1;
}
message HelloReply {
string bar = 1;
}
main_test.go
package hello_test
import (
"context"
"log"
"net"
"testing"
"github.com/Asuha-a/test/pb"
"google.golang.org/grpc"
"google.golang.org/grpc/test/bufconn"
)
type server struct {
pb.UnimplementedHelloServer
}
const bufSize = 1024 * 1024
var lis *bufconn.Listener
func init() {
lis = bufconn.Listen(bufSize)
s := grpc.NewServer()
pb.RegisterHelloServer(s, &server{})
go func() {
if err := s.Serve(lis); err != nil {
log.Fatalf("server exited with error: %v", err)
}
}()
}
func bufDialer(context.Context, string) (net.Conn, error) {
return lis.Dial()
}
func TestHello(t *testing.T) {
ctx := context.Background()
conn, err := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer), grpc.WithInsecure())
if err != nil {
t.Fatalf("failed to dial bufnet: %v", err)
}
defer conn.Close()
client := pb.NewHelloClient(conn)
r, err := client.Hello(ctx, &pb.HelloRequest{
Foo: "foo",
})
if err != nil {
t.Fatalf("failed to Hello: %v", err) //49th line prints the error
}
log.Println(r)
}
在测试中,您正在调用pb。注册服务器,
您必须在
服务器
结构上实现Hello
rpc:
func (s *server) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
return &pb.HelloReply{}, nil
}
注:嵌入
pb。UnimplementedHelloServer
以编译时检查为代价,使gRPC服务器实现向前兼容。为了放弃前向兼容性并在编译时捕获这些错误,可以嵌入pb。UnsafeHelloServer
。
本文向大家介绍Spring Boot Hello World的实现代码,包括了Spring Boot Hello World的实现代码的使用技巧和注意事项,需要的朋友参考一下 本篇文章是SpringBoot最入门的介绍。我们不借助任何额外的工具,从无到有创建一个Spring Boot的web项目,并运行这个项目。 项目构建 归根结底,Spring Boot就只是一个框架,几个jar而已,没什么神奇
代码入口 applicationContext-web.xml 文件路径: pinpoint/web/src/main/resources/applicationContext-web.xml 导入的配置文件有hbase.properties和jdbc.properties: <bean id="propertyConfigurer" class="org.springframework.bean
我有一个Android项目,它在构建时从proto文件生成gRPC类,在helloworld示例下:https://github.com/grpc/grpc-java/tree/master/examples/src 我的JUnit测试遵循为HelloWorldClient编写的测试(https://github.com/grpc/grpc-java/blob/master/examples/ex
本文向大家介绍Python实现简易端口扫描器代码实例,包括了Python实现简易端口扫描器代码实例的使用技巧和注意事项,需要的朋友参考一下 在网上的一些资料的基础上自己又添了些新内容,算是Python socket编程练手吧。 使用效果如下: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
实现Run 实现Flock 前面提到进程的文件锁,实际上Run也用到了,可以试想下以下的场景。 用户A执行run pt-summary,由于本地已经缓存了所以会直接运行本地的脚本。同时用户B执行run -u pt-summary,加上-u或者--update参数后Run会从远端下载并运行最新的脚本。如果不加文件锁的话,用户A的行为就不可预测了,而文件锁很好得解决了这个问题。 具体使用方法如下,我们
#coding=utf-8 ''''' ''' from math import log import operator def createDataSet(): dataSet =[[1,1,'yes'], [1,1,'yes'], [1,0,'no'], [0,1