সার্ভার এবং ক্লায়েন্ট মডেল
সার্ভার এবং ক্লায়েন্ট মডেল একটি গুরুত্বপূর্ণ ধারণা, যা ডিস্ট্রিবিউটেড সিস্টেম, নেটওয়ার্কিং এবং API ডিজাইনের ক্ষেত্রে ব্যবহৃত হয়। এখানে আমরা Thrift ব্যবহার করে সার্ভার এবং ক্লায়েন্ট মডেল সম্পর্কে আলোচনা করবো।
সার্ভার এবং ক্লায়েন্ট মডেল এর গঠন
সার্ভার:
- সার্ভার হল একটি প্রোগ্রাম বা ডিভাইস যা ক্লায়েন্টের অনুরোধ গ্রহণ করে এবং সেই অনুযায়ী সাড়া দেয়। এটি ডেটা প্রদান করে, পরিষেবা পরিচালনা করে এবং ক্লায়েন্টের কার্যক্রম সমর্থন করে।
ক্লায়েন্ট:
- ক্লায়েন্ট হল একটি প্রোগ্রাম বা ডিভাইস যা সার্ভারের সাথে যোগাযোগ করে এবং সার্ভার থেকে তথ্য বা পরিষেবা প্রাপ্ত করে। ক্লায়েন্ট সার্ভারের প্রতি অনুরোধ পাঠায় এবং প্রাপ্ত তথ্য ব্যবহার করে।
Thrift সার্ভার এবং ক্লায়েন্ট বাস্তবায়ন
১. সার্ভার মডেল
সার্ভার তৈরি করতে হলে, আপনাকে নিচের পদক্ষেপগুলি অনুসরণ করতে হবে:
Thrift IDL ফাইল তৈরি করুন (যেমন example.thrift):
namespace py example
// Enum definition
enum UserType {
ADMIN = 1,
MEMBER = 2,
GUEST = 3
}
// User struct definition
struct User {
1: i32 id,
2: string name,
3: UserType userType
}
// Service definition
service UserService {
User getUser(1: i32 userId);
void createUser(1: User user);
}
Thrift কম্পাইলার ব্যবহার করে কোড জেনারেট করুন:
thrift --gen py example.thrift
সার্ভার বাস্তবায়ন করুন (যেমন server.py):
from thrift import Thrift
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
from example import UserService
class UserServiceHandler:
def getUser(self, userId):
return User(id=userId, name="John Doe", userType=UserType.MEMBER)
def createUser(self, user):
print(f"User created: {user.name}, Type: {user.userType}")
def main():
handler = UserServiceHandler()
processor = UserService.Processor(handler)
transport = TSocket.TServerSocket(host='127.0.0.1', port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print("Starting the server...")
server.serve()
if __name__ == '__main__':
main()
২. ক্লায়েন্ট মডেল
ক্লায়েন্ট তৈরি করতে নিচের পদক্ষেপগুলি অনুসরণ করতে হবে:
ক্লায়েন্ট বাস্তবায়ন করুন (যেমন client.py):
from thrift import Thrift
from thrift.transport import TTransport
from thrift.transport import TSocket
from thrift.protocol import TBinaryProtocol
from example import UserService
def main():
transport = TSocket.TSocket('127.0.0.1', 9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
transport = tfactory.getTransport(transport)
protocol = pfactory.getProtocol(transport)
client = UserService.Client(protocol)
try:
transport.open()
user = User(id=1, name="Jane Doe", userType=UserType.ADMIN)
client.createUser(user)
retrieved_user = client.getUser(1)
print(f"Retrieved User: {retrieved_user.name}, Type: {retrieved_user.userType}")
finally:
transport.close()
if __name__ == '__main__':
main()
সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগ
সার্ভার: সার্ভার ক্লায়েন্টের অনুরোধ গ্রহণ করে এবং প্রয়োজনীয় তথ্য বা পরিষেবা প্রদান করে। এটি UserService সার্ভিসের মাধ্যমে getUser এবং createUser মেথডগুলিকে পরিচালনা করে।
ক্লায়েন্ট: ক্লায়েন্ট createUser মেথডের মাধ্যমে নতুন ব্যবহারকারী তৈরি করে এবং getUser মেথডের মাধ্যমে একটি নির্দিষ্ট ব্যবহারকারীর তথ্য আহরণ করে।
সারসংক্ষেপ
সার্ভার এবং ক্লায়েন্ট মডেল Apache Thrift ব্যবহার করে কার্যকরীভাবে তৈরি করা যায়। Thrift IDL ফাইলের মাধ্যমে API সংজ্ঞায়িত করে, পরে Thrift কম্পাইলার ব্যবহার করে কোড জেনারেট করা হয়। সার্ভার এবং ক্লায়েন্ট উভয়েই তৈরি করার পর, তারা একে অপরের সাথে RPC কলের মাধ্যমে যোগাযোগ করে। এটি ডিস্ট্রিবিউটেড সিস্টেম এবং মাইক্রোসার্ভিস আর্কিটেকচারের জন্য অত্যন্ত কার্যকরী।
Apache Thrift সার্ভার হল একটি গুরুত্বপূর্ণ উপাদান যা ক্লায়েন্টের রিমোট প্রোসিজার কল (RPC) গ্রহণ করে এবং প্রয়োজনীয় পরিষেবা প্রদান করে। Thrift সার্ভারের কাজের প্রক্রিয়া মূলত একটি নির্দিষ্ট সার্ভিসের কার্যক্রম বাস্তবায়ন এবং ক্লায়েন্টের অনুরোধের ভিত্তিতে তথ্যের প্রক্রিয়াকরণ নিয়ে গঠিত। নিচে Thrift সার্ভার কীভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করা হলো।
Thrift সার্ভার কাজ করার প্রক্রিয়া
১. সার্ভিস সংজ্ঞায়িত করা
- IDL ফাইল: প্রথমে একটি Thrift IDL (Interface Definition Language) ফাইল তৈরি করতে হয়, যেখানে সার্ভিসের নাম, মেথড এবং ডেটা টাইপগুলি সংজ্ঞায়িত করা হয়। উদাহরণস্বরূপ:
namespace py example
service ExampleService {
string sayHello(1:string name)
}
২. Thrift Compiler ব্যবহার করে কোড জেনারেট করা
- Thrift IDL ফাইলের মাধ্যমে সার্ভিসের জন্য কোড জেনারেট করার জন্য Thrift Compiler ব্যবহার করা হয়।
thrift --gen py example.thrift
- এই কমান্ডটি Python ভাষায় সার্ভিসের জন্য ক্লায়েন্ট এবং সার্ভার কোড জেনারেট করবে।
৩. সার্ভিস ইমপ্লিমেন্টেশন
- সার্ভার ইমপ্লিমেন্টেশন: জেনারেটেড কোড ব্যবহার করে সার্ভিসের কার্যক্রম বাস্তবায়ন করতে হয়। যেমন:
from example import ExampleService
from thrift import Thrift
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
class ExampleServiceHandler:
def sayHello(self, name):
return f"Hello, {name}!"
handler = ExampleServiceHandler()
processor = ExampleService.Processor(handler)
transport = TTransport.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print("Starting the server...")
server.serve()
৪. সার্ভার চালানো
- সার্ভার কোড সম্পন্ন হলে, এটি শুরু করতে হয়। উপরোক্ত কোডের মাধ্যমে সার্ভারটি 9090 পোর্টে শুরু হবে এবং ক্লায়েন্টের অনুরোধগুলি গ্রহণ করবে।
৫. ক্লায়েন্টের অনুরোধ
- ক্লায়েন্ট: ক্লায়েন্ট প্রোগ্রাম Thrift-এ সংজ্ঞায়িত সার্ভিসের মেথড কল করে। উদাহরণস্বরূপ:
from example import ExampleService
from thrift import Thrift
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
transport = TTransport.TBufferedTransport(TTransport.TSocket("localhost", 9090))
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ExampleService.Client(protocol)
transport.open()
response = client.sayHello("World")
print(response)
transport.close()
৬. অনুরোধ প্রক্রিয়াকরণ
- ক্লায়েন্ট যখন
sayHelloমেথড কল করে, এটি সার্ভারে পৌঁছে যায়। সার্ভার সেই কল গ্রহণ করে এবংExampleServiceHandlerক্লাসে সংজ্ঞায়িত কার্যক্রম অনুযায়ী কাজ করে।
৭. ফলাফল ফেরত পাঠানো
- সার্ভার ক্লায়েন্টের জন্য ফলাফল (যেমন "Hello, World!") ফিরিয়ে দেয়, যা ক্লায়েন্টে প্রদর্শিত হয়।
উপসংহার
Thrift সার্ভার একটি কার্যকরী উপাদান যা ক্লায়েন্টের অনুরোধগুলি প্রক্রিয়া করে এবং সঠিক ফলাফল প্রদান করে। এটি IDL ফাইল থেকে কোড জেনারেশন, সার্ভিস ইমপ্লিমেন্টেশন, এবং RPC কল পরিচালনার মাধ্যমে কাজ করে। Thrift সার্ভারগুলি ডিস্ট্রিবিউটেড সিস্টেমে যোগাযোগের জন্য একটি শক্তিশালী এবং নমনীয় সমাধান প্রদান করে, যা বিভিন্ন প্রোগ্রামিং ভাষার মধ্যে কার্যকরী যোগাযোগ নিশ্চিত করে।
Apache Thrift সার্ভার বিভিন্ন প্রকারের হতে পারে, যার মধ্যে Simple, Threaded, এবং Non-blocking সার্ভার অন্তর্ভুক্ত। প্রতিটি প্রকারের নিজস্ব সুবিধা ও সীমাবদ্ধতা রয়েছে এবং বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে। নিচে এই তিন প্রকারের সার্ভারের বিশদ আলোচনা করা হলো।
১. Simple Server
বর্ণনা:
Simple Server হল Thrift-এর সবচেয়ে মৌলিক সার্ভার ইমপ্লিমেন্টেশন। এটি একটি সিঙ্গেল থ্রেডেড পরিবেশে কাজ করে এবং এক সময়ে একটি ক্লায়েন্টের অনুরোধ গ্রহণ করে।
বৈশিষ্ট্য:
- একসাথে এক ক্লায়েন্ট: এক সময়ে একটি ক্লায়েন্টের অনুরোধ প্রক্রিয়া করে।
- সহজ এবং দ্রুত: সেটআপ করা সহজ এবং খুব কম সম্পদ প্রয়োজন।
- সরাসরি লুপ: একটি লুপের মাধ্যমে সার্ভার ক্লায়েন্টের অনুরোধ শোনে এবং প্রক্রিয়া করে।
ব্যবহার ক্ষেত্র:
- সাধারণ পরীক্ষামূলক পরিবেশ বা ছোট অ্যাপ্লিকেশন যেখানে কম লোড থাকে।
উদাহরণ:
from thrift.server import TServer
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
# Handler এবং Processor সেটআপ করুন
handler = ExampleServiceHandler()
processor = ExampleService.Processor(handler)
# Simple Server তৈরি করুন
transport = TTransport.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print("Starting the Simple server...")
server.serve()
২. Threaded Server
বর্ণনা:
Threaded Server হল একটি মাল্টি-থ্রেডেড পরিবেশে কাজ করে। এটি একাধিক ক্লায়েন্টের অনুরোধ সমান্তরালভাবে প্রক্রিয়া করতে পারে।
বৈশিষ্ট্য:
- একাধিক ক্লায়েন্ট: একাধিক থ্রেড তৈরি করে, যা একসাথে একাধিক ক্লায়েন্টের অনুরোধ গ্রহণ করতে সক্ষম।
- উচ্চ কর্মক্ষমতা: এটি বৃহৎ লোড পরিচালনার জন্য বেশি কার্যকরী।
- কমপ্লেক্সিটি: সার্ভার ইমপ্লিমেন্টেশন কিছুটা জটিল হতে পারে, কারণ থ্রেড নিরাপত্তা এবং মেমরি ব্যবস্থাপনার বিষয়ে যত্ন নিতে হবে।
ব্যবহার ক্ষেত্র:
- মাঝারি থেকে বড় আকারের অ্যাপ্লিকেশন যেখানে একাধিক ক্লায়েন্টের অনুরোধ সমান্তরালে প্রক্রিয়া করা প্রয়োজন।
উদাহরণ:
from thrift.server import TServer
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
# Handler এবং Processor সেটআপ করুন
handler = ExampleServiceHandler()
processor = ExampleService.Processor(handler)
# Threaded Server তৈরি করুন
transport = TTransport.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TThreadedServer(processor, transport, tfactory, pfactory)
print("Starting the Threaded server...")
server.serve()
৩. Non-blocking Server
বর্ণনা:
Non-blocking Server একটি আসিঙ্ক্রোনাস সার্ভার ইমপ্লিমেন্টেশন। এটি একাধিক ক্লায়েন্টের অনুরোধ গ্রহণ এবং প্রক্রিয়া করার সময় ব্লকিং ছাড়াই কাজ করে।
বৈশিষ্ট্য:
- অ্যাসিঙ্ক্রোনাস: এটি I/O অপারেশনগুলি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করে না। বরং এটি ক্লায়েন্টের অনুরোধের ফলাফল পাওয়ার সময় অন্য কাজগুলি চালিয়ে যেতে পারে।
- সক্রিয়তা: উচ্চ লোড এবং বহু ক্লায়েন্টের সমান্তরাল অনুরোধের জন্য খুব কার্যকর।
- জটিল ইমপ্লিমেন্টেশন: এই ধরনের সার্ভার তৈরি করতে কিছুটা জটিল কোডিং প্রয়োজন।
ব্যবহার ক্ষেত্র:
- বড় সিস্টেম যেখানে অনেক ক্লায়েন্ট একই সময়ে সংযোগ করে এবং দ্রুত প্রতিক্রিয়া প্রয়োজন।
উদাহরণ:
from thrift.server import TServer
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
# Handler এবং Processor সেটআপ করুন
handler = ExampleServiceHandler()
processor = ExampleService.Processor(handler)
# Non-blocking Server তৈরি করুন
transport = TTransport.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TNonblockingServer(processor, transport, tfactory, pfactory)
print("Starting the Non-blocking server...")
server.serve()
উপসংহার
Apache Thrift-এ Simple, Threaded, এবং Non-blocking সার্ভারগুলি প্রতিটি তাদের নিজ নিজ প্রয়োজন এবং পরিবেশ অনুযায়ী কার্যকরী। Simple Server সাধারণ পরিস্থিতিতে কার্যকর হলেও, Threaded Server এবং Non-blocking Server উচ্চ লোড এবং ক্লায়েন্টের জন্য উপযোগী। আপনার অ্যাপ্লিকেশনের চাহিদা অনুযায়ী সঠিক সার্ভার প্রকার নির্বাচন করা গুরুত্বপূর্ণ।
Apache Thrift ব্যবহার করে ক্লায়েন্ট তৈরি এবং RPC (Remote Procedure Call) কল করার প্রক্রিয়া সহজ এবং কার্যকর। নিচে ক্লায়েন্ট তৈরি করার পদক্ষেপ এবং RPC কল করার উদাহরণ তুলে ধরা হলো।
ক্লায়েন্ট তৈরি করার পদক্ষেপ
১. IDL ফাইল তৈরি করা
প্রথমে একটি Thrift IDL (Interface Definition Language) ফাইল তৈরি করতে হবে যেখানে সার্ভিস এবং মেথডগুলি সংজ্ঞায়িত থাকবে।
example.thrift:
namespace py example
service ExampleService {
string sayHello(1:string name)
}
২. Thrift Compiler ব্যবহার করে কোড জেনারেট করা
Thrift কমান্ড ব্যবহার করে IDL ফাইল থেকে ক্লায়েন্ট কোড জেনারেট করুন। নিচে Python ভাষার জন্য উদাহরণ দেওয়া হলো:
thrift --gen py example.thrift
এই কমান্ডটি gen-py নামে একটি ডিরেক্টরি তৈরি করবে, যেখানে Python কোড জেনারেট হবে।
৩. ক্লায়েন্ট প্রোগ্রাম তৈরি করা
Python ভাষায় ক্লায়েন্ট প্রোগ্রাম তৈরি করুন। এখানে একটি উদাহরণ দেওয়া হলো:
client.py:
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from example import ExampleService
def main():
# সার্ভারের সাথে সংযোগ স্থাপন করুন
transport = TSocket.TSocket("localhost", 9090)
tfactory = TTransport.TBufferedTransportFactory()
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ExampleService.Client(protocol)
try:
# সার্ভারের সাথে সংযোগ করুন
transport.open()
# RPC কল করুন
name = "World"
response = client.sayHello(name)
print(response) # সার্ভারের কাছ থেকে প্রাপ্ত ফলাফল প্রদর্শন করুন
except Thrift.TException as tx:
print(f"Thrift exception: {tx.message}")
finally:
# সংযোগ বন্ধ করুন
transport.close()
if __name__ == "__main__":
main()
৪. ক্লায়েন্ট চালানো
ক্লায়েন্ট প্রোগ্রামটি চালানোর জন্য, আপনার প্রথমে Thrift সার্ভার চালু করতে হবে (যা ExampleService সার্ভিসটি সরবরাহ করে) এবং তারপর ক্লায়েন্ট প্রোগ্রামটি চালাতে হবে:
bash
Copy code
python client.py
RPC কলের প্রক্রিয়া
- সংযোগ স্থাপন: ক্লায়েন্ট প্রথমে সার্ভারের সাথে TCP/IP সংযোগ স্থাপন করে।
- RPC কল: ক্লায়েন্ট সার্ভিসের মেথড (যেমন
sayHello) কল করে এবং প্রয়োজনীয় প্যারামিটার (যেমনname) পাঠায়। - ফলাফল প্রাপ্তি: সার্ভার ক্লায়েন্টের অনুরোধটি প্রক্রিয়া করে এবং ফলাফল (যেমন "Hello, World!") ফেরত পাঠায়।
- সংযোগ বন্ধ করা: ক্লায়েন্ট প্রোগ্রাম শেষে সার্ভারের সাথে সংযোগ বন্ধ করে।
উপসংহার
Apache Thrift ব্যবহার করে ক্লায়েন্ট তৈরি এবং RPC কল করার প্রক্রিয়া কার্যকর এবং সহজ। এই প্রক্রিয়ার মাধ্যমে ক্লায়েন্ট সার্ভারের সাথে সহজেই যোগাযোগ করতে পারে এবং বিভিন্ন কার্যক্রম সম্পন্ন করতে সক্ষম হয়। Thrift এর মাধ্যমে একাধিক প্রোগ্রামিং ভাষার মধ্যে কার্যকরী যোগাযোগ নিশ্চিত করা হয়, যা ডিস্ট্রিবিউটেড সিস্টেমে উপকারী।
Apache Thrift ব্যবহার করে সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগের প্রক্রিয়া খুবই কার্যকরী। নিচে একটি উদাহরণ সহ সার্ভার এবং ক্লায়েন্টের মধ্যে কিভাবে যোগাযোগ স্থাপন করা যায় তা বিশ্লেষণ করা হলো।
১. IDL ফাইল তৈরি করা
প্রথমে একটি Thrift IDL (Interface Definition Language) ফাইল তৈরি করুন, যেখানে সার্ভিস এবং মেথডগুলি সংজ্ঞায়িত থাকবে।
example.thrift:
namespace py example
service ExampleService {
string sayHello(1:string name)
}
২. Thrift Compiler ব্যবহার করে কোড জেনারেট করা
Thrift কমান্ড ব্যবহার করে IDL ফাইল থেকে ক্লায়েন্ট এবং সার্ভার কোড জেনারেট করুন। নিচে Python ভাষার জন্য উদাহরণ দেওয়া হলো:
thrift --gen py example.thrift
এই কমান্ডটি gen-py নামে একটি ডিরেক্টরি তৈরি করবে, যেখানে Python কোড জেনারেট হবে।
৩. সার্ভার কোড তৈরি করা
সার্ভার প্রোগ্রাম তৈরি করুন যা ক্লায়েন্টের অনুরোধ গ্রহণ করবে এবং সঠিকভাবে প্রক্রিয়া করবে।
server.py:
from thrift import Thrift
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
from example import ExampleService
class ExampleServiceHandler:
def sayHello(self, name):
return f"Hello, {name}!"
handler = ExampleServiceHandler()
processor = ExampleService.Processor(handler)
transport = TTransport.TServerSocket(port=9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print("Starting the server...")
server.serve()
৪. ক্লায়েন্ট কোড তৈরি করা
ক্লায়েন্ট প্রোগ্রাম তৈরি করুন যা সার্ভারের সাথে সংযোগ স্থাপন করবে এবং অনুরোধ পাঠাবে।
client.py:
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from example import ExampleService
def main():
# সার্ভারের সাথে সংযোগ স্থাপন করুন
transport = TSocket.TSocket("localhost", 9090)
tfactory = TTransport.TBufferedTransportFactory()
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = ExampleService.Client(protocol)
try:
# সার্ভারের সাথে সংযোগ করুন
transport.open()
# RPC কল করুন
name = "World"
response = client.sayHello(name)
print(response) # সার্ভারের কাছ থেকে প্রাপ্ত ফলাফল প্রদর্শন করুন
except Thrift.TException as tx:
print(f"Thrift exception: {tx.message}")
finally:
# সংযোগ বন্ধ করুন
transport.close()
if __name__ == "__main__":
main()
৫. সার্ভার এবং ক্লায়েন্ট চালানো
সার্ভার চালানো: প্রথমে সার্ভার চালু করুন।
python server.py
ক্লায়েন্ট চালানো: সার্ভার চালু থাকার পর ক্লায়েন্ট চালান।
python client.py
সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগের প্রক্রিয়া
- সার্ভার শুরু হয়: সার্ভার
9090পোর্টে ক্লায়েন্টের জন্য শোনে। - ক্লায়েন্ট সংযোগ করে: ক্লায়েন্ট সার্ভারের সাথে TCP/IP সংযোগ স্থাপন করে।
- RPC কল: ক্লায়েন্ট
sayHelloমেথড কল করে এবং নাম (যেমন "World") পাঠায়। - সার্ভার প্রক্রিয়া করে: সার্ভার অনুরোধ গ্রহণ করে এবং ক্লায়েন্টকে সাড়া দেয়।
- ফলাফল ফেরত পাঠানো: সার্ভার ফলাফল (যেমন "Hello, World!") ক্লায়েন্টকে ফেরত পাঠায়।
- ক্লায়েন্ট ফলাফল প্রদর্শন করে: ক্লায়েন্ট প্রাপ্ত ফলাফল কনসোলে প্রদর্শন করে।
উপসংহার
Apache Thrift ব্যবহার করে সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগ স্থাপন করা খুবই সহজ এবং কার্যকর। এই উদাহরণে, Thrift IDL ফাইল ব্যবহার করে সার্ভিস এবং মেথড সংজ্ঞায়িত করা হয়েছে, এবং সেই অনুযায়ী সার্ভার ও ক্লায়েন্ট কোড তৈরি করা হয়েছে। Thrift এর মাধ্যমে একাধিক প্রোগ্রামিং ভাষার মধ্যে কার্যকরী যোগাযোগ নিশ্চিত করা হয়, যা ডিস্ট্রিবিউটেড সিস্টেমে উপকারী।
Read more