প্রকল্প সম্পর্কে
grpc-web হলো ব্রাউজার ক্লায়েন্টের জন্য gRPC-এর একটি JavaScript বাস্তবায়ন, যা grpc/grpc-web রিপোজিটরির অধীনে রক্ষণাবেক্ষণ করা হয়। ব্রাউজার সরাসরি HTTP/2 gRPC সংযোগ খুলতে পারে না, তাই gRPC-web ক্লায়েন্টরা একটি বিশেষ প্রক্সির মাধ্যমে gRPC সেবার সাথে যোগাযোগ করে; Envoy হলো ডিফল্ট প্রক্সি, এবং প্রকল্পটি gRPC-web Go প্রক্সি, Apache APISIX এবং Nginx-এর gRPC মডিউলের সাথে আন্তঃকার্যক্ষমতার নথিও প্রদান করে।
প্রকল্পটি দুটি প্রধান অংশ সরবরাহ করে। প্রথমত, npm-এ `grpc-web` নামে প্রকাশিত একটি রানটাইম লাইব্রেরি, যা এখন সম্পূর্ণভাবে TypeScript-এ লেখা এবং তাই প্রথম শ্রেণির টাইপ সুরক্ষা, শূন্য রানটাইম নির্ভরতা এবং অন্তর্নির্মিত টাইপ সংজ্ঞা প্রদান করে। দ্বিতীয়ত, একটি protoc প্লাগইন, `protoc-gen-grpc-web`, যা `.proto` সংজ্ঞা থেকে ক্লায়েন্ট সেবা স্টাব তৈরি করে। জেনারেশন সাধারণত স্ট্যান্ডার্ড `--js_out` প্লাগইন (protobuf মেসেজ ক্লাসের জন্য) এর সাথে `--grpc-web_out` (সেবা স্টাবের জন্য) জোড়া লাগায়, এবং Browserify, Webpack বা Closure Compiler দিয়ে বান্ডল করা যায়।
সমর্থিত RPC মোড হলো unary কল এবং server-side streaming। Server-side streaming শুধুমাত্র `grpcwebtext` ওয়্যার ফরম্যাট মোডে উপলব্ধ, যেখানে পেলোড base64-এনকোড করা হয় এবং `Content-Type: application/grpc-web-text` সহ পাঠানো হয়। একটি বাইনারি মোড, `grpcweb`, বাইনারি protobuf পেলোড সহ `Content-Type: application/grpc-web+proto` ব্যবহার করে কিন্তু শুধুমাত্র unary কল সমর্থন করে। Client-side এবং bidirectional streaming বর্তমানে সমর্থিত নয়।
কোড জেনারেশন কয়েকটি ইমপোর্ট স্টাইল অফার করে: `closure` (ডিফল্ট, `goog.require()` ব্যবহার করে), `commonjs` (`require()` ব্যবহার করে), `commonjs+dts` (CommonJS স্টাব প্লাস একটি `.d.ts` টাইপিং ফাইল), এবং `typescript` (সম্পূর্ণ TypeScript আউটপুট)। `commonjs+dts` এবং `typescript` স্টাইল শুধুমাত্র `--grpc-web_out` দ্বারা সমর্থিত, `--js_out` দ্বারা নয়। README-তে বাইনারি ওয়্যার ফরম্যাট সহ TypeScript কোড জেনারেট করার একটি নির্দিষ্ট উদাহরণ রয়েছে, যা একটি TypeScript সেবা ক্লায়েন্ট, একটি JavaScript protobuf মডিউল এবং একটি মিলে যাওয়া `.d.ts` সংজ্ঞা ফাইল তৈরি করে।
ক্লায়েন্ট ব্যবহার সহজ: একটি প্রক্সি URL দিয়ে একটি সেবা ক্লায়েন্ট ইনস্ট্যান্টিয়েট করুন, একটি অনুরোধ বার্তা তৈরি করুন, এবং ঐচ্ছিক মেটাডেটা এবং একটি কলব্যাক সহ RPC কল করুন। Server-side streaming একটি স্ট্রিম অবজেক্ট ফেরত দেয় যাতে `data`, `status` এবং `end` ইভেন্ট থাকে, সাথে একটি `cancel()` পদ্ধতি। মিলিসেকেন্ডে একটি Unix টাইমস্ট্যাম্প ধারণকারী `deadline` হেডার পাস করে একটি ডেডলাইন সেট করা যায়। দুটি ক্লায়েন্ট স্টাইল উপলব্ধ: কলব্যাক-ভিত্তিক ক্লায়েন্ট এবং Promise-ভিত্তিক ক্লায়েন্ট, যদিও Promise ভ্যারিয়েন্ট মেটাডেটা এবং স্ট্যাটাসের জন্য `.on(...)` কলব্যাক অ্যাক্সেস করতে পারে না।
কাস্টম ইন্টারসেপ্টর বাস্তবায়ন এবং চেইন করা যায় যেমন প্রমাণীকরণ এবং পুনঃপ্রচেষ্টার বৈশিষ্ট্যের জন্য। দুটি ইন্টারসেপ্টর ধরন বিদ্যমান: `UnaryInterceptor`, যা unary RPC ইন্টারসেপ্ট করে এবং শুধুমাত্র Promise ক্লায়েন্টের সাথে ব্যবহার করা যায়, এবং `StreamInterceptor`, যা আরও বহুমুখী এবং নিয়মিত ক্লায়েন্টের সাথে কাজ করে।
রিপোজিটরিতে একটি Hello World উদাহরণ রয়েছে যা প্রোটোকল বাফার দিয়ে একটি সেবা সংজ্ঞায়িত করা, একটি Node.js gRPC সেবা বাস্তবায়ন, Envoy প্রক্সি কনফিগার করা, protobuf ক্লাস এবং ক্লায়েন্ট স্টাব জেনারেট করা, এবং JS নির্ভরতাগুলো একটি স্ট্যাটিক লাইব্রেরিতে কম্পাইল করা ধাপে ধাপে দেখায়। আরও উন্নত একটি Echo ডেমো Docker Compose দিয়ে চালানো যায় এবং স্ট্রিমিং পরীক্ষার জন্য একটি ব্রাউজার পৃষ্ঠা প্রকাশ করে। README ইকোসিস্টেম ইন্টিগ্রেশনের দিকেও ইঙ্গিত করে, যার মধ্যে রয়েছে Armeria (JVM) এবং Tonic (Rust) সার্ভার ফ্রেমওয়ার্ক যাতে gRPC-web সমর্থন রয়েছে, এবং একটি Vite সামঞ্জস্য ডেমো। একটি রোডম্যাপ নথিতে ভবিষ্যতের কাজের রূপরেখা দেওয়া হয়েছে, যার মধ্যে রয়েছে Python, Java এবং Node-এর জন্য ভাষা-নির্দিষ্ট ওয়েব ফ্রেমওয়ার্ক সমর্থন।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.