[Flutter] GRPC 통신
🤷🏻♀️ Flutter
🐐 Flutter gRPC 통신
1. pubspec.yaml에 grpc 추가
flutter: 3.10
dependencies:
grpc: ^3.2.2
protobuf: ^3.0.0
protoc_plugin: ^21.0.2
2. proto 파일 생성
syntax = "proto3";
option java_multiple_files = true;
option java_outer_classname = "EventProto";
option java_package = "com.inspect";
package inspect;
import "google/protobuf/timestamp.proto";
service Greeter {
rpc GetPart (PartRequest) returns (PartReply) {}
rpc UpdateInspect (InspectRequest) returns (InspectReply) {}
rpc GetInspect (InspectListRequest) returns (InspectListReply) {}
}
message GrpcDecimal {
int64 units = 1;
sfixed32 nanos = 2;
}
message PartRequest {
string partCodeX = 1;
}
message PartReply {
string partName = 1;
string partSpec = 2;
}
message InspectRequest {
string barCode = 1;
google.protobuf.Timestamp scanTime = 2;
}
message InspectReply {
string message = 1;
}
message InspectListRequest {
google.protobuf.Timestamp inspectDate = 1;
}
message InspectListReply {
string inspectJson = 1;
}
3. plugin 설치 및 경로 업데이트
- 꼭 경로 업데이트를 해야한다. 안할경우 에러가 난다.
pub global activate protoc_plugin
# linux
$ export PATH="$PATH:$HOME/.pub-cache/bin"
#windows - powershell
$env:PATH += ";$env:USERPROFILE/.pub-cache/bin"
3-1 경로 업데이트를 안할경우
pub global run protoc_plugin:protoc --dart_out=grpc:lib/src/generated -I=lib/protos lib/protos/*.proto
4. proto 파일을 dart 파일로 변환
protoc -I=lib/protos --dart_out=lib/src/generated
4-1. protoc_plugin 버전이 낮아서 에러가 난다면
protoc -I=lib/protos --dart_out=grpc:lib/src/generated
- pbgrpc.dart 파일이 생성이 안되는 경우 grpc: 옵션을 추가해준다.
4-2. timestamp.proto 파일이 없다고 에러난다
import 'google/protobuf/timestamp.pb.dart' as $0; // timestamp.pb.dart 파일이 없다고 에러가 난다.
이럴경우에는 timestamp.proto 파일을 다운받아서 lib/protos에 넣어주면 된다.
실제로 generated 폴더에 lib/protos 폴더에 다운받아서 넣어놓고선
protoc -I=lib/protos --dart_out=lib/src/generated /lib/protos/*
를 실행하기도 하지만 다운받아 놓은 timestamp.proto가 없을경우
protoc -I=lib/protos --dart_out=lib/src/generated google/protobuf/timestamp.proto
이렇게 진행해도 된다.
진행하고나면 lib/src/generated 폴더에 google/protobuf 폴더가 생성되며 timestamp.pb.dart 파일이 생성된다.
4. gRPC 통신
import 'package:grpc/grpc.dart';
import 'package:grpc_test/src/generated/event.pbgrpc.dart';
Note: 만들고나니 내것이 아니었다.
Leave a comment