🌐 Detecting your location…
📢 Advertisement — Configure AdSense in Appearance → Customize → AdSense Settings

gRPC সম্পূর্ণ গাইড 2026: প্রোটোকল বাফার, পাইথন এবং টাইপস্ক্রিপ্ট

⏱️4 min read  ·  691 words

gRPC হল হাই-পারফরম্যান্স RPC ফ্রেমওয়ার্ক যা Google, Netflix, Square এবং হাজার হাজার মাইক্রোসার্ভিসেস টিম দ্বারা ব্যবহৃত হয়। 2026 সালে, প্রোটোকল বাফার সহ gRPC প্রতিটি ভাষায় টাইপ-সেফ জেনারেটেড কোড সহ পরিষেবা থেকে পরিষেবা যোগাযোগের জন্য REST+JSON-এর থেকে 7-10x ভাল পারফরম্যান্স সরবরাহ করে। এই নির্দেশিকাটি প্রথম .proto থেকে শুরু করে উৎপাদন gRPC পরিষেবা পর্যন্ত সবকিছুই কভার করে।

gRPC বনাম REST

বৈশিষ্ট্য gRPC বিশ্রাম
প্রোটোকল HTTP/2 HTTP/1.1 বা HTTP/2
সিরিয়ালাইজেশন প্রোটোকল বাফার (বাইনারী) JSON (পাঠ্য)
গতি 7-10x দ্রুত ক্রমিককরণ বেসলাইন
টাইপ নিরাপত্তা উত্পন্ন, কঠোর ম্যানুয়াল (OpenAPI ঐচ্ছিক)
স্ট্রিমিং অন্তর্নির্মিত (4 প্রকার) SSE বা WebSockets
ব্রাউজার সমর্থন শুধুমাত্র grpc-ওয়েব নেটিভ

প্রোটোকল বাফার (.proto) স্কিমা

// user_service.proto
syntax = "proto3";
package userservice.v1;

import "google/protobuf/timestamp.proto";
import "google/protobuf/empty.proto";

option go_package = "github.com/mycompany/proto/userservice/v1";

// Enums
enum UserRole {
  USER_ROLE_UNSPECIFIED = 0;
  USER_ROLE_USER = 1;
  USER_ROLE_ADMIN = 2;
  USER_ROLE_MODERATOR = 3;
}

// Messages
message User {
  int64 id = 1;
  string name = 2;
  string email = 3;
  UserRole role = 4;
  bool active = 5;
  google.protobuf.Timestamp created_at = 6;
}

message CreateUserRequest {
  string name = 1;
  string email = 2;
  string password = 3;
  UserRole role = 4;
}

message GetUserRequest {
  int64 id = 1;
}

message ListUsersRequest {
  int32 page = 1;
  int32 page_size = 2;
  string filter = 3;
}

message ListUsersResponse {
  repeated User users = 1;
  int32 total = 2;
  int32 page = 3;
}

// Service definition
service UserService {
  // Unary RPC
  rpc GetUser(GetUserRequest) returns (User);
  rpc CreateUser(CreateUserRequest) returns (User);

  // Server streaming — server sends multiple messages
  rpc ListUsers(ListUsersRequest) returns (stream User);

  // Client streaming — client sends multiple messages
  rpc UploadUsers(stream CreateUserRequest) returns (ListUsersResponse);

  // Bidirectional streaming
  rpc SyncUsers(stream User) returns (stream User);
}

পাইথন জিআরপিসি সার্ভার

pip install grpcio grpcio-tools

# Generate Python code from .proto
python -m grpc_tools.protoc   -I.   --python_out=.   --grpc_python_out=.   user_service.proto

# server.py
import grpc
from concurrent import futures
import user_service_pb2 as pb2
import user_service_pb2_grpc as pb2_grpc
from datetime import datetime
from google.protobuf import timestamp_pb2

class UserServiceServicer(pb2_grpc.UserServiceServicer):
    def __init__(self):
        self.users: dict[int, pb2.User] = {}
        self._next_id = 1

    def GetUser(self, request, context):
        user = self.users.get(request.id)
        if not user:
            context.set_code(grpc.StatusCode.NOT_FOUND)
            context.set_details(f"User {request.id} not found")
            return pb2.User()
        return user

    def CreateUser(self, request, context):
        # Validation
        if not request.email or "@" not in request.email:
            context.set_code(grpc.StatusCode.INVALID_ARGUMENT)
            context.set_details("Invalid email address")
            return pb2.User()

        ts = timestamp_pb2.Timestamp()
        ts.GetCurrentTime()

        user = pb2.User(
            id=self._next_id,
            name=request.name,
            email=request.email,
            role=request.role or pb2.USER_ROLE_USER,
            active=True,
            created_at=ts,
        )
        self.users[self._next_id] = user
        self._next_id += 1
        return user

    def ListUsers(self, request, context):
        for user in list(self.users.values()):
            if context.is_active():
                yield user  # streaming!

def serve():
    server = grpc.server(
        futures.ThreadPoolExecutor(max_workers=10),
        interceptors=[LoggingInterceptor()],
    )
    pb2_grpc.add_UserServiceServicer_to_server(UserServiceServicer(), server)
    server.add_insecure_port("0.0.0.0:50051")
    server.start()
    print("gRPC server started on :50051")
    server.wait_for_termination()

if __name__ == "__main__":
    serve()

পাইথন জিআরপিসি ক্লায়েন্ট

# client.py
import grpc
import user_service_pb2 as pb2
import user_service_pb2_grpc as pb2_grpc

def run():
    with grpc.insecure_channel("localhost:50051") as channel:
        stub = pb2_grpc.UserServiceStub(channel)

        # Unary call
        user = stub.CreateUser(pb2.CreateUserRequest(
            name="Alice",
            email="alice@example.com",
            role=pb2.USER_ROLE_ADMIN,
        ))
        print(f"Created: {user.id} {user.name}")

        # Get user
        fetched = stub.GetUser(pb2.GetUserRequest(id=user.id))
        print(f"Fetched: {fetched.name}")

        # Server streaming
        for u in stub.ListUsers(pb2.ListUsersRequest(page=1, page_size=10)):
            print(f"  {u.id}: {u.name}")

# With metadata (auth header)
metadata = [("authorization", "Bearer " + jwt_token)]
user = stub.GetUser(pb2.GetUserRequest(id=1), metadata=metadata)

# With timeout
user = stub.GetUser(pb2.GetUserRequest(id=1), timeout=5.0)

# Handle errors
try:
    user = stub.GetUser(pb2.GetUserRequest(id=999))
except grpc.RpcError as e:
    print(f"Error: {e.code()} - {e.details()}")

if __name__ == "__main__":
    run()

টাইপস্ক্রিপ্ট সহ gRPC

npm install @grpc/grpc-js @grpc/proto-loader
npm install --save-dev ts-proto

// server.ts
import * as grpc from '@grpc/grpc-js';
import * as protoLoader from '@grpc/proto-loader';
import path from 'path';

const PROTO_PATH = path.join(__dirname, 'user_service.proto');
const packageDef = protoLoader.loadSync(PROTO_PATH);
const proto = grpc.loadPackageDefinition(packageDef) as any;

const getUserService = {
  getUser: (call: grpc.ServerUnaryCall<any, any>, callback: grpc.sendUnaryData<any>) => {
    const { id } = call.request;
    const user = db.users.findById(id);
    if (!user) {
      callback({ code: grpc.status.NOT_FOUND, message: `User ${id} not found` });
      return;
    }
    callback(null, user);
  },
};

const server = new grpc.Server();
server.addService(proto.userservice.v1.UserService.service, getUserService);
server.bindAsync('0.0.0.0:50051', grpc.ServerCredentials.createInsecure(), () => {
  server.start();
  console.log('gRPC server on :50051');
});

উৎপাদন জিআরপিসি

  • TLS — use grpc.credentials.createSsl()শংসাপত্র ফাইল সহ
  • ইন্টারসেপ্টর— প্রমাণীকরণ, লগিং, ট্রেসিং, ইন্টারসেপ্টর হিসাবে হার সীমিত করা
  • স্বাস্থ্য পরীক্ষা— gRPC হেলথ চেকিং প্রোটোকল প্রয়োগ করুন
  • দূত প্রক্সি— ব্রাউজার ক্লায়েন্টদের জন্য লোড ব্যালেন্সিং + gRPC-ওয়েব
  • Buf— আধুনিক প্রোটোকল বাফার টুলচেইন (লিন্টিং, ফরম্যাটিং, ব্রেকিং চেঞ্জ ডিটেকশন)
  • ওপেনটেলিমেট্রি— জিআরপিসি পরিষেবা জুড়ে ট্রেসিং বিতরণ করা হয়েছে

2026-এ gRPC হল উচ্চ-পারফরম্যান্স মাইক্রোসার্ভিস যোগাযোগের মান। সার্ভিস-টু-সার্ভিস কলের জন্য এটি ব্যবহার করুন যেখানে কর্মক্ষমতা গুরুত্বপূর্ণ, যেখানে আপনার দ্বিমুখী স্ট্রিমিং প্রয়োজন, বা যেখানে ভাষা জুড়ে শক্তিশালী টাইপিং গুরুত্বপূর্ণ। সর্বজনীন API এবং ব্রাউজার-মুখী শেষ পয়েন্টগুলির জন্য REST রাখুন।

✍️ Leave a Comment

Your email address will not be published. Required fields are marked *

🌐 Read in:🇬🇧 English🇩🇪 Deutsch🇧🇷 Português🇸🇦 العربية🇮🇳 हिन्दी🇧🇩 বাংলা