1. ภาพรวม
gRPC เป็นเฟรมเวิร์กและชุดเครื่องมือสำหรับการเรียกกระบวนการทำงานจากระยะไกล (RPC) ที่ไม่ขึ้นกับภาษาและแพลตฟอร์ม ซึ่งพัฒนาขึ้นที่ Google ซึ่งช่วยให้คุณกำหนดบริการโดยใช้ Protocol Buffers ซึ่งเป็นชุดเครื่องมือและภาษาสำหรับการซีเรียลไลซ์แบบไบนารีที่มีประสิทธิภาพเป็นพิเศษ จากนั้นจะช่วยให้คุณสร้าง Stub ไคลเอ็นต์และเซิร์ฟเวอร์ที่เหมาะสมจากคำจำกัดความของบริการในภาษาต่างๆ ได้
ใน Codelab นี้ คุณจะได้เรียนรู้วิธีสร้างบริการ C# ที่แสดง API โดยใช้เฟรมเวิร์ก gRPC คุณโต้ตอบกับบริการนี้โดยใช้ไคลเอ็นต์คอนโซลที่เขียนด้วย C# ซึ่งใช้คำอธิบายบริการเดียวกันกับบริการ
สิ่งที่คุณจะได้เรียนรู้
- ภาษาบัฟเฟอร์โปรโตคอล
- วิธีติดตั้งใช้งานบริการ gRPC โดยใช้ C#
- วิธีติดตั้งใช้งานไคลเอ็นต์ gRPC โดยใช้ C#
- วิธีอัปเดตบริการ gRPC
สิ่งที่คุณต้องมี
- เบราว์เซอร์ เช่น Chrome หรือ Firefox
- Visual Studio 2013 ขึ้นไปติดตั้งแล้ว
- คุ้นเคยกับ .NET Framework และภาษา C#
คุณจะใช้บทแนะนำนี้อย่างไร
คุณจะให้คะแนนประสบการณ์การใช้งาน Google Cloud Platform เท่าไร
2. ดาวน์โหลดและสร้างตัวอย่าง gRPC C#
ดาวน์โหลดตัวอย่าง
ดาวน์โหลดที่เก็บตัวอย่าง gRPC C# เป็นไฟล์ zip แล้วแตกไฟล์
หรือจะโคลนที่เก็บ git ก็ได้
git clone https://github.com/meteatamel/grpc-samples-dotnet.git
ไม่ว่าจะใช้วิธีใด คุณควรมีโฟลเดอร์ grpc-samples-dotnet ที่มีเนื้อหาต่อไปนี้

สร้างโซลูชัน
โฟลเดอร์แอปพลิเคชันตัวอย่างมี GrpcSamples.sln ซึ่งเป็นโซลูชันของ Visual Studio ดับเบิลคลิกเพื่อเปิดโซลูชันใน Visual Studio คุณควรเห็นโซลูชันที่มีจำนวนโปรเจ็กต์

เราจะดูรายละเอียดเพิ่มเติมเกี่ยวกับโปรเจ็กต์ในส่วนถัดไป แต่ก่อนอื่น มาสร้างโปรเจ็กต์กันก่อน ไปที่ Build > Build Solution หรือ Ctrl + Shift + B เพื่อสร้างโซลูชัน ซึ่งจะดาวน์โหลดการขึ้นต่อกันทั้งหมดจาก NuGet แล้วคอมไพล์แอปพลิเคชัน
ในตอนท้าย คุณควรเห็นข้อความ Build succeeded ในเอาต์พุตของคอนโซล Visual Studio
3. สำรวจตัวอย่าง Greeter
Greeter เป็นตัวอย่าง gRPC อย่างง่ายที่ไคลเอ็นต์ส่งคำขอพร้อมชื่อ และเซิร์ฟเวอร์จะตอบกลับด้วยข้อความตามด้วยชื่อ มีโปรเจ็กต์ Greeter ซึ่งมีคำจำกัดความบริการทั่วไป (ไฟล์ Proto) ที่ไคลเอ็นต์และเซิร์ฟเวอร์ใช้เป็นพื้นฐาน
โปรเจ็กต์ Greeter
นี่คือโปรเจ็กต์ทั่วไปที่แชร์ระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ โดยมี greeter.proto ซึ่งเป็นคำจำกัดความของบริการ gRPC ที่ไคลเอ็นต์และเซิร์ฟเวอร์ใช้ คำจำกัดความของบริการจะกำหนดบริการ gRPC ที่ชื่อ GreetingService และมีเมธอด greeting ที่รับ HelloRequest เป็นอินพุตและ HelloResponse เป็นเอาต์พุต
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
นี่คือเมธอดแบบเอกภาคี (เช่น ไม่มีการสตรีม) ซึ่งไคลเอ็นต์จะส่งคำขอเดียวและได้รับการตอบกลับเดียวจากเซิร์ฟเวอร์ คุณสามารถสำรวจเนื้อหาที่เหลือของ greeter.proto. โปรเจ็กต์นี้ยังมีสคริปต์ชื่อ generate_protos.bat ซึ่งใช้สร้าง Stub ของไคลเอ็นต์และเซิร์ฟเวอร์จากไฟล์ Proto ได้ โปรเจ็กต์มี Stub ของไคลเอ็นต์และเซิร์ฟเวอร์ที่สร้างขึ้นแล้ว คุณจึงไม่ต้องสร้างเอง อย่างไรก็ตาม หากคุณเปลี่ยนแปลงไฟล์คำจำกัดความของบริการ คุณจะต้องเรียกใช้สคริปต์นี้เพื่อสร้าง Stub ใหม่
เซิร์ฟเวอร์ Greeter
นี่คือโปรเจ็กต์สำหรับเซิร์ฟเวอร์ gRPC Program.cs คือจุดแรกเข้าหลักที่ตั้งค่าการใช้งานพอร์ตและเซิร์ฟเวอร์ คลาสที่สำคัญคือ GreeterServiceImpl.cs มีเมธอด greeting ที่ใช้ฟังก์ชันการทำงานจริง
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
ไคลเอ็นต์ Greeter
นี่คือฝั่งไคลเอ็นต์ของบริการ gRPC นอกจากนี้ ยังมี Program.cs เป็นจุดแรกเข้าด้วย โดยจะสร้างแชแนลเพื่อพูดคุยกับเซิร์ฟเวอร์ จากนั้นจึงสร้างไคลเอ็นต์ด้วยแชแนลจาก Stub ที่สร้างขึ้น จากนั้นจะสร้างคำขอและส่งไปยังเซิร์ฟเวอร์โดยใช้ Stub ของไคลเอ็นต์
4. เรียกใช้ตัวอย่าง Greeter
ก่อนอื่น ให้เริ่มเซิร์ฟเวอร์ Greeter เปิด Command Prompt แล้วไปที่โฟลเดอร์ bin > Debug ของ Greeter Server แล้วเรียกใช้ไฟล์ที่เรียกใช้งานได้ คุณควรเห็นว่าเซิร์ฟเวอร์กำลังรับฟังอยู่
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
จากนั้นเรียกใช้ไคลเอ็นต์ Greeter ในพรอมต์คำสั่งแยกต่างหาก ให้ไปที่โฟลเดอร์ bin > Debug ของ Greeter Server แล้วเรียกใช้ไฟล์ที่เรียกใช้งานได้ คุณควรเห็นไคลเอ็นต์ส่งคำขอและรับการตอบกลับจากเซิร์ฟเวอร์
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
Press any key to exit...
5. อัปเดตตัวอย่าง Greeter
มาดูกันว่าการอัปเดตบริการของเราเป็นอย่างไร เพิ่มเมธอดใหม่ลงในบริการ gRPC ของเราชื่อ "goodbye" ซึ่งจะแสดงผล "goodbye" แทน "hello" ให้กับไคลเอ็นต์
ขั้นตอนแรกคือการอัปเดตไฟล์คำจำกัดความของบริการ greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
จากนั้นคุณต้องสร้างสตับไคลเอ็นต์และเซิร์ฟเวอร์ใหม่ เรียกใช้ generate_protos.bat ใน Command Prompt เมื่อสร้าง Stub แล้ว คุณอาจต้องรีเฟรชโปรเจ็กต์ Visual Studio เพื่อรับโค้ดที่อัปเดต
สุดท้าย ให้อัปเดตโค้ดไคลเอ็นต์และเซิร์ฟเวอร์เพื่อใช้ประโยชน์จากเมธอดใหม่ ในบริการ ให้อัปเดต GreeterServiceImpl.cs และเพิ่มวิธีการ goodbye ใหม่
public override Task<HelloResponse> goodbye(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Goodbye " + request.Name });
}
ในไคลเอ็นต์ ให้เรียกใช้เมธอด goodbye ใน Program.cs.
response = client.goodbye(request);
Console.WriteLine("GreeterClient received response: "
+ response.Greeting);
สร้างโปรเจ็กต์ใหม่และเรียกใช้เซิร์ฟเวอร์และไคลเอ็นต์อีกครั้ง ตอนนี้คุณควรเห็นไคลเอ็นต์ได้รับข้อความบอกลาแล้ว
> C:\grpc-samples-dotnet\GreeterClient\bin\Debug>GreeterClient.exe
GreeterClient sending request
GreeterClient received response: Hello Mete - on C#
GreeterClient received response: Goodbye Mete - on C#
Press any key to exit...
6. สำรวจตัวอย่าง Chat
นอกจากนี้ ยังมีโปรเจ็กต์ ChatServer และ ChatWindowsClient ในโซลูชันด้วย ตามชื่อที่ระบุไว้ นี่คือคู่ไคลเอ็นต์และเซิร์ฟเวอร์สำหรับแอปพลิเคชันแชทอย่างง่าย โปรเจ็กต์ Chat มีไฟล์คำจำกัดความบริการชื่อ chat.proto ซึ่งกำหนด ChatService ด้วยเมธอด chat
service ChatService {
rpc chat(stream ChatMessage) returns (stream ChatMessageFromServer);
}
สิ่งสำคัญที่นี่คือทั้งข้อความแชทขาเข้าและขาออกจะมีการทำเครื่องหมายด้วยคีย์เวิร์ด stream ซึ่งจะเปลี่ยนการเชื่อมต่อให้เป็นสตรีมแบบ 2 ทางที่ไคลเอ็นต์และเซิร์ฟเวอร์สามารถส่งข้อความถึงกันได้ทุกเมื่อ ซึ่งเป็นโซลูชันที่เหมาะสำหรับแอปพลิเคชันแชท
คุณสามารถสำรวจตัวอย่าง สร้าง และเรียกใช้เพื่อดูวิธีการทำงานได้
7. ยินดีด้วย
สิ่งที่เราได้พูดถึง
- ภาษาบัฟเฟอร์โปรโตคอล
- วิธีติดตั้งใช้งานบริการ gRPC โดยใช้ C#
- วิธีติดตั้งใช้งานไคลเอ็นต์ gRPC โดยใช้ C#
- วิธีอัปเดตบริการ gRPC
ขั้นตอนถัดไป
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Windows ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ .NET ใน Google Cloud Platform
- ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Tools for Visual Studio