首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么grpc-go可以在同一地址和端口运行grpc服务器和http服务器,而grpc-node不能

为什么grpc-go可以在同一地址和端口运行grpc服务器和http服务器,而grpc-node不能
EN

Stack Overflow用户
提问于 2020-08-31 17:45:02
回答 2查看 1.2K关注 0票数 2

我读过这样的答案:https://stackoverflow.com/a/56943771/6463558,它说没有办法使用grpc-node包在相同的地址和端口运行gRPC服务器和HTTP服务器。

但是我可以使用grpc-go包在相同的地址和端口创建gRPC服务器和HTTP服务器(例如,两者都使用localhost:3000)。下面是一个示例:https://github.com/mrdulin/grpc-go-cnode/blob/master/cmd/server/main.go#L79

那么,为什么grpc-node和grpc-go的行为不一致呢?这有意义吗?

我期望的结果是,无论在grpc中实现哪种语言,行为都应该是一致的。因此,grpc服务器应该能够与Node的标准库http在同一系统进程中创建的服务器共享相同的端口。

EN

回答 2

Stack Overflow用户

发布于 2020-09-02 06:05:30

这都是关于实现的。每种语言都有自己的gRPC实现。每种语言的实现都有许多不同之处,其中一些是由于语言能力的原因,也是由于维护者的原因。每个项目都是一个不同的项目。

在这种情况下,我们不能说gRPC和HTTP服务器共享相同的地址。只有HTTP服务器在运行。但是,gRPC服务器Golang实现可以选择通过However为gRPC提供服务。

呼叫

代码语言:javascript
复制
server.ServeHTTP()

而不是

代码语言:javascript
复制
server.Serve()

这是可能的,因为在幕后,gRPC服务器构建在HTTP2之上

你分享的链接中的这个片段清楚地说明了我的意思

代码语言:javascript
复制
if request.ProtoMajor != 2 {
            mux.ServeHTTP(writer, request)
            return
}

if strings.Contains(request.Header.Get("Content-Type"), "application/grpc") {
                grpcServer.ServeHTTP(writer, request)
                return
}

如果您想在Node中执行相同的操作,则需要检查grpc-node实现是否有可用的grpc-node实现

票数 3
EN

Stack Overflow用户

发布于 2020-09-01 00:22:40

您的示例使用Go standard library提供的http.NewServeMux()。Node标准库没有提供等效的特性,因此您不能以这种方式共享端口。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63668447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档