ローカル マシンの Python で単純な GRPC サーバーを実行しています。Android デバイスから Java を使用して接続しようとすると、Caused by: io.grpc.StatusRuntimeException: UNAVAILABLE
エラーが発生し続けます。Pythonクライアントを介してサーバーに接続しようとしたところ、期待どおりに機能したことに注意してください。この問題は、Java クライアントを使用している場合にのみ発生します。
私はPythonでクライアントを使用してprotoファイルに問題があるかどうかを確認しようとしましたが、正しく機能したので、PythonサーバーとJavaクライアントの組み合わせ間の接続に問題があると思います.
private ManagedChannel mChannel;
private TestGrpc.TestBlockingStub blockingStub;
private TestGrpc.TestStub asyncStub;
mChannel = ManagedChannelBuilder.forAddress("10.0.0.17", 50051).build();
blockingStub = TestGrpc.newBlockingStub(mChannel);
helloMessage testMessage = helloMessage.newBuilder()
.setMessageContent("NAME")
.build();
helloMessage msg= blockingStub.sayHello(testMessage);
プロトファイル:
syntax="proto3";
option java_package = "io.grpc.testing";
option java_multiple_files = true;
option java_outer_classname = "TestClass";
option objc_class_prefix = "TST ";
package TestCode;
service Test{
rpc sayHello(helloMessage) returns (helloMessage) {}
rpc streamTest(helloMessage) returns (stream helloMessage) {}
}
message helloMessage{
string messageContent = 1;
}
パイソンサーバー
import protofile_pb2
import protofile_pb2_grpc
# create a class to define the server functions, derived from
# calculator_pb2_grpc.CalculatorServicer
class TestService(protofile_pb2_grpc.TestServicer):
# calculator.square_root is exposed here
# the request and response are of the data type
# calculator_pb2.Number
def sayHello(self, request, context):
response = protofile_pb2.helloMessage()
response.messageContent = "hello mister "+request.messageContent
return response
# create a gRPC server
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
# use the generated function `add_CalculatorServicer_to_server`
# to add the defined class to the server
protofile_pb2_grpc.add_TestServicer_to_server(
TestService(), server)
# listen on port 50051
print('Starting server. Listening on port 50051.')
server.add_insecure_port('[::]:50051')
server.start()
# since server.start() will not block,
# a sleep-loop is added to keep alive
try:
while True:
time.sleep(86400)
except KeyboardInterrupt:
server.stop(0)
これは、文字列 "hello mister NAME" である 1 つの値を持つ反復子を返す必要があります。実結果:
Caused by:io.grpc.StatusRuntimeException: UNAVAILABLE