我的GRPC客户端无法连接到我在同一台计算机上托管的集装箱的GRPC服务器
我正在实现我的GRPC服务器的GRPC客户端和服务器应用程序。这个想法是使用UNIX域插座在客户端和服务器之间进行通信。我的应用程序正常工作,直到我的服务器没有被容器化。
当我容忍GRPC服务器时,出现了问题。在这种情况下,我的客户端无法到达GRPC服务器。以下是我收到的错误消息。
raise _InactiveRpcError(state)
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with:
status = StatusCode.UNAVAILABLE
details = "failed to connect to all addresses"
debug_error_string = "{"created":"@1655378324.763238318","description":"Failed to pick subchannel","file":"src/core/ext/filters/client_channel/client_channel.cc","file_line":3217,"referenced_errors":[{"created":"@1655378324.763237121","description":"failed to connect to all addresses","file":"src/core/lib/transport/error_utils.cc","file_line":165,"grpc_status":14}]}"
我正在寻求一些帮助,以了解我在GRPC客户端或服务器代码中需要进行的修改以进行此工作。
GRPC客户端代码:
import grpc
import greeting_pb2 as pb2
import greeting_pb2_grpc as pb2_grpc
class HelloWorldClient(object):
def __init__(self):
self.host = 'localhost'
self.server_port = 50051
#self.channel = grpc.insecure_channel('{}:{}'.format(self.host, self.server_port), options=(('grpc.enable_http_proxy', 0),))
#self.channel = grpc.insecure_channel('unix:///var/run/test.sock', options=(('grpc.enable_http_proxy', 0),))
self.channel = grpc.insecure_channel('unix:///service/test.sock', options=(('grpc.enable_http_proxy', 0),))
self.stub = pb2_grpc.GreeterStub(self.channel)
def get_url(self, message):
message = pb2.Request(name=message)
return self.stub.SayHello(message)
if __name__ == '__main__':
client = HelloWorldClient()
result = client.get_url(message="Billi")
print(f'{result}')
GRPC服务器代码:
import grpc
from concurrent import futures
import time
import greeting_pb2_grpc as pb2_grpc
import greeting_pb2 as pb2
import sys
print("Python version")
print (sys.version)
class HelloWorldService(pb2_grpc.GreeterServicer):
def __init__(self, *args, **kwargs):
pass
def SayHello(self, request, context):
message = request.name
print("Python version")
result = f'Hello {message}! Glad to hear from you!'
result = {'message':result}
return pb2.Response(**result)
def serve():
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
pb2_grpc.add_GreeterServicer_to_server(HelloWorldService(), server)
server.add_insecure_port('unix:///service//test.sock')
print("Ready To Start")
server.start()
print("Server Started")
server.wait_for_termination()
if __name__ == '__main__':
serve()
客户端和服务器都在同一主机上运行,但是服务器在Docker容器中运行。我已经在主机和Docker容器中创建了一个名为“服务”的文件夹,并且
docker run -v /service/test.sock:/service/test.sock:rw grpc_sock_new
根据我的理解运行Docker容器时,我正在将此路径安装到套接字上,解决问题的关键是以下代码行。
server.add_insecure_port('unix:///service//test.sock')
请建议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可能使用的斜线数量超过要求
在GRPC服务器代码中的此行中:
server.add_insecure_port('unix:///service//test.sock')
尝试使用此改音:
server.add_insecure_port('unix:// unix:// /service/test.sock')
编辑:1
covureences:
You may be using more number of slashes than required
in this line in gRPC Server Code:
server.add_insecure_port('unix:///service//test.sock')
Try Using this instead :
server.add_insecure_port('unix:///service/test.sock')
Edit : 1
References :