1. ภาพรวม
gRPC เป็นเฟรมเวิร์กและชุดเครื่องมือสำหรับการเรียกกระบวนการทำงานจากระยะไกล (RPC) แบบกลางๆ และเป็นกลางทางภาษาซึ่งพัฒนาที่ Google เครื่องมือนี้จะช่วยให้คุณกำหนดบริการโดยใช้ Protocol Buffers ซึ่งเป็นชุดเครื่องมือและภาษาที่เรียงลำดับแบบไบนารีที่มีประสิทธิภาพเป็นพิเศษ จากนั้นจะให้คุณสร้างสตับเซิร์ฟเวอร์และไคลเอ็นต์ที่มีลักษณะเฉพาะจากคำจำกัดความของบริการในภาษาต่างๆ
ใน 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
เพื่อสร้างโซลูชัน การดำเนินการนี้จะดาวน์โหลดทรัพยากร Dependency ทั้งหมดจาก NuGet แล้วคอมไพล์แอปพลิเคชัน
สุดท้าย คุณควรเห็นข้อความ Build succeeded
ในเอาต์พุตของคอนโซล Visual Studio
3. สำรวจตัวอย่าง Greeter
Greeter คือตัวอย่าง gRPC แบบง่ายที่ไคลเอ็นต์ส่งคำขอที่มีชื่อ และเซิร์ฟเวอร์จะตอบกลับด้วยข้อความตามด้วยชื่อ มีโปรเจ็กต์ Greeter ที่มีคำจำกัดความของบริการทั่วไป (ไฟล์โปรโต) ที่ไคลเอ็นต์และเซิร์ฟเวอร์ใช้อยู่
โปรเจ็กต์ Geeter
ซึ่งเป็นโปรเจ็กต์ทั่วไปที่แชร์ระหว่างไคลเอ็นต์กับเซิร์ฟเวอร์ โดยมี greeter.proto
ซึ่งเป็นคำจำกัดความของบริการ gRPC ที่ไคลเอ็นต์และเซิร์ฟเวอร์ใช้ คำจำกัดความของบริการกำหนดบริการ gRPC ที่เรียกว่า GreetingService
และมีเมธอด greeting
ที่ใช้ HelloRequest
เป็นอินพุตและ HelloResponse
เป็นเอาต์พุต
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
}
ซึ่งเป็นวิธีแบบเดี่ยว (กล่าวคือ ไม่มีสตรีมมิง) ที่ไคลเอ็นต์จะส่งคำขอเดียวและรับการตอบกลับรายการเดียวจากเซิร์ฟเวอร์ คุณจะสำรวจเนื้อหาที่เหลือของ greeter.proto.
ได้ โปรเจ็กต์นี้ยังมีสคริปต์ชื่อ generate_protos.bat
ที่ใช้สร้างสตับไคลเอ็นต์และเซิร์ฟเวอร์จากไฟล์โปรโตได้ด้วย โปรเจ็กต์มีสตับไคลเอ็นต์และเซิร์ฟเวอร์ที่สร้างขึ้นแล้ว คุณจึงไม่จําเป็นต้องสร้างสตับเซิร์ฟเวอร์เอง อย่างไรก็ตาม หากคุณเปลี่ยนแปลงบางอย่างเกี่ยวกับไฟล์คำจำกัดความของบริการ คุณจะต้องเรียกใช้สคริปต์นี้เพื่อสร้างสตับใหม่
เซิร์ฟเวอร์ทักทาย
โปรเจ็กต์นี้สำหรับเซิร์ฟเวอร์ gRPC Program.cs
คือจุดแรกเข้าหลักที่มีการติดตั้งใช้งานพอร์ตและเซิร์ฟเวอร์ ชั้นเรียนที่สำคัญคือ GreeterServiceImpl.cs
มีเมธอด greeting
ที่มีการติดตั้งใช้งานฟังก์ชันจริง
public override Task<HelloResponse> greeting(HelloRequest request,
ServerCallContext context)
{
return Task.FromResult(new HelloResponse {
Greeting = "Hello " + request.Name });
}
ไคลเอ็นต์คำทักทาย
นี่คือฝั่งไคลเอ็นต์ของบริการ gRPC และยังมี Program.cs
เป็นจุดแรกเข้าอีกด้วย สร้างแชแนลเพื่อพูดคุยกับเซิร์ฟเวอร์ แล้วสร้างไคลเอ็นต์ด้วยแชแนลจากสตับที่สร้างขึ้น จากนั้นจะสร้างคำขอและส่งไปยังเซิร์ฟเวอร์โดยใช้สตับไคลเอ็นต์
4. เรียกใช้ตัวอย่าง Greeter
ขั้นแรก ให้เริ่มต้นเซิร์ฟเวอร์ Greeter เปิด Command Prompt แล้วไปยังโฟลเดอร์ bin > Debug
ของเซิร์ฟเวอร์ Greeter และเรียกใช้ไฟล์สั่งการ คุณควรเห็นเซิร์ฟเวอร์ที่รอการเชื่อมต่ออยู่
> C:\grpc-samples-dotnet\GreeterServer\bin\Debug>GreeterServer.exe
GreeterServer listening on port 50051
Press any key to stop the server...
จากนั้นให้เรียกใช้ Greeter Client ใน Command Prompt แยกต่างหาก และไปที่โฟลเดอร์ bin > Debug
ของเซิร์ฟเวอร์ Greeter และเรียกใช้ไฟล์สั่งการ คุณควรเห็นไคลเอ็นต์ส่งคำขอและได้รับการตอบกลับจากเซิร์ฟเวอร์
> 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 ที่เรียกว่าลาก่อนที่ส่งคืนการลาแทนการทักทายลูกค้า
ขั้นตอนแรกคือการอัปเดตไฟล์การกำหนดบริการ greeter.proto.
service GreetingService {
rpc greeting(HelloRequest) returns (HelloResponse);
rpc goodbye(HelloRequest) returns (HelloResponse);
}
ขั้นตอนต่อไป คุณจะต้องสร้างไคลเอ็นต์และสตับเซิร์ฟเวอร์ใหม่ เรียกใช้ generate_protos.bat
ใน Command Prompt เมื่อสร้างสตับแล้ว คุณอาจต้องรีเฟรชโปรเจ็กต์ 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 สำหรับ Visual Studio