아주 간단한 Unity 3D에서 gRPC 통신 테스트
1. gRPC 다운로드
1-1. 다운로드 사이트에 접속. (https://packages.grpc.io/)
최신 버전의 Build ID를 클릭 .
1-2. gRPC protoc Plugins에서 OS에 맞는 파일 다운로드.
C#에서 grpc_unity_package...~...zip 다운로드.
1-3. 압축 해제한 grpc-protoc 파일은 .proto 파일을 컴파일할 때 계속 사용하게 되므로 적당한 곳에 압축을 풀어 보관.
grpc_unity_package 파일은 압축 해제 후 Plugins 폴더 생성 그대로 유니티 프로젝트 Assets 폴더 하위 이동.
2. .proto 작성 및 컴파일
2-1. proto 파일 작성
사용하는 IDE, Editor, 메모장 등을 사용. 작성한 후 .proto 파일로 grpc-protoc 보관 파일 이동.
test.proto 내용
syntax = "proto3";
package MyProject.Test;
service EchoTest { rpc Ping (PingRequest) returns (PongResponse) {} }
message PingRequest { string message = 1; }
message PongResponse { string message = 1; }
2-2. proto 파일 컴파일
컴파일 명령어
OS: MAC, Linux
protoc -I ./ --csharp_out=. [name.proto] --grpc_out=. --plugin=protoc-gen-grpc=grpc_csharp_plugin
OS: Windows
./protoc -I ./ --csharp_out=. [name.proto] --grpc_out=. --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe
Windows Ex) ./protoc -I ./ --csharp_out=. test.proto --grpc_out=. --plugin=protoc-gen-grpc=grpc_csharp_plugin.exe
cmd로 해당 경로로 들어가 위 명령어를 입력하면 자동 컴파일.
test.proto 파일 컴파일 후 Test.cs, TestGrpc.cs 파일이 생성.
3. Unity 3D 실습
3-1. 컴파일해서 나온 .cs 파일 두 개 모두 Unity3D 프로젝트로 이동.
server, client 통신 테스트를 위해 server, client 두 개의 프로젝트를 생성.
//---------------Server 스크립트-----------------//
using System.Threading.Tasks;
using UnityEngine;
using Grpc.Core;
using MyProject.Test; // .proto파일 만들 때 만든 namespace
public class GrpcServerTest : MonoBehaviour
{
Server server;
const string IP = "localhost";
const int Port = 88888;
// Start is called before the first frame update
void Start()
{
server = new Server
{
Services = { EchoTest.BindService(new EchoTestPingGRPC())}, //서비스 생성
Ports = { new ServerPort(IP, Port, ServerCredentials.Insecure) }
};
server.Start(); // 서버 오픈
}
}
public class EchoTestPingGRPC : EchoTest.EchoTestBase
{
public override Task<PongResponse> Ping(PingRequest request, ServerCallContext context)
{
Debug.Log(request.Message);
return Task.FromResult(new PongResponse { Message = "Echo: " + request.Message }); //들어온 메시지를 반환
}
}
//--------------------Clinet 스크립트------------------//
using UnityEngine;
using Grpc.Core;
using MyProject.Test; // .proto파일 만들 때 만든 namespace
public class GrpcClientTest : MonoBehaviour
{
const string IP = "localhost:";
const int Port = 88888;
string mes = "Hi!! Test Echo";
Channel channel;
void Start()
{
channel = new Channel(IP + Port, ChannelCredentials.Insecure); //채널 생성
var client = new EchoTest.EchoTestClient(channel); //클라이언트 생성
var repley = client.Ping(new PingRequest { Message = mes }); // 메시지 보내고 응답받기
Debug.Log(repley.Message);
}
}
3-2. 각 server/client에 위 스크립트 생성 후 오브젝트에 스크립트를 넣어 server부터 실행.
'gRPC' 카테고리의 다른 글
gRPC란 ? (0) | 2021.06.17 |
---|---|
gRPC on Unity 3D (C# proto, server, client Example) (0) | 2021.06.15 |