RMI Callback এর মাধ্যমে Two-Way Communication

RMI Callback Mechanism - জাভা আরএমআই (Java RMI) - Java Technologies

272

Java RMI সাধারণত ক্লায়েন্ট-টু-সার্ভার যোগাযোগে ব্যবহৃত হয়। তবে RMI Callback পদ্ধতি ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকের (two-way) যোগাযোগ নিশ্চিত করা যায়। এই পদ্ধতিতে, ক্লায়েন্ট একটি Remote Object সার্ভারের কাছে নিবন্ধিত করে এবং সার্ভার প্রয়োজন অনুযায়ী ক্লায়েন্টকে কলব্যাক করে।


RMI Callback কী?

RMI Callback এমন একটি প্রক্রিয়া যেখানে:

  1. Client তার Remote Object সার্ভারের কাছে রেজিস্টার করে।
  2. Server সেই Remote Object ব্যবহার করে ক্লায়েন্টকে মেথড কল করে।

এই পদ্ধতি Two-Way Communication বা Bidirectional Communication এর জন্য ব্যবহৃত হয়।


RMI Callback এর প্রক্রিয়া

1. Remote Interface তৈরি করা (Callback Interface)

একটি Remote Interface তৈরি করা হয় যা সার্ভার ক্লায়েন্টের Remote Object এ কল করার জন্য ব্যবহার করবে।

import java.rmi.Remote;
import java.rmi.RemoteException;

// Callback Interface
public interface CallbackClientInterface extends Remote {
    void notifyClient(String message) throws RemoteException;
}

2. Remote Interface তৈরি করা (Server Service Interface)

এটি সার্ভিসের জন্য ব্যবহৃত হবে, যেখানে ক্লায়েন্ট নিজের Remote Object রেজিস্টার করবে।

import java.rmi.Remote;
import java.rmi.RemoteException;

// Server Service Interface
public interface ServerServiceInterface extends Remote {
    void registerClient(CallbackClientInterface client) throws RemoteException;
    void sendMessage(String message) throws RemoteException;
}

3. সার্ভার ইমপ্লিমেন্টেশন (Server Implementation)

সার্ভার ক্লায়েন্টদের রেজিস্টার করে এবং তাদের Callback মেথড কল করে।

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;
import java.util.ArrayList;
import java.util.List;

// Server Implementation
public class ServerServiceImpl extends UnicastRemoteObject implements ServerServiceInterface {
    private final List<CallbackClientInterface> clients;

    public ServerServiceImpl() throws RemoteException {
        super();
        clients = new ArrayList<>();
    }

    @Override
    public void registerClient(CallbackClientInterface client) throws RemoteException {
        clients.add(client);
        System.out.println("Client registered.");
    }

    @Override
    public void sendMessage(String message) throws RemoteException {
        System.out.println("Sending message to clients...");
        for (CallbackClientInterface client : clients) {
            client.notifyClient(message);
        }
    }
}

4. ক্লায়েন্ট ইমপ্লিমেন্টেশন (Client Implementation)

ক্লায়েন্ট নিজের Remote Object ইমপ্লিমেন্ট করে এবং সার্ভারে রেজিস্টার করে।

Callback Client Implementation:

import java.rmi.server.UnicastRemoteObject;
import java.rmi.RemoteException;

// Client Callback Implementation
public class CallbackClientImpl extends UnicastRemoteObject implements CallbackClientInterface {
    public CallbackClientImpl() throws RemoteException {
        super();
    }

    @Override
    public void notifyClient(String message) throws RemoteException {
        System.out.println("Message from Server: " + message);
    }
}

Client Main Class:

import java.rmi.Naming;

public class RMIClient {
    public static void main(String[] args) {
        try {
            // RMI Registry থেকে Server Object খুঁজে বের করা
            ServerServiceInterface server = (ServerServiceInterface) Naming.lookup("rmi://localhost:1099/ServerService");

            // Callback Object তৈরি এবং রেজিস্ট্রেশন
            CallbackClientInterface client = new CallbackClientImpl();
            server.registerClient(client);

            // সার্ভারে মেসেজ পাঠানোর অনুরোধ
            server.sendMessage("Hello from Client!");

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

5. সার্ভার মেইন ক্লাস (Server Main Class)

RMI Registry-তে সার্ভার অবজেক্ট রেজিস্টার করা হয়।

import java.rmi.Naming;

public class RMIServer {
    public static void main(String[] args) {
        try {
            // Server Implementation তৈরি এবং RMI Registry-তে রেজিস্ট্রেশন
            ServerServiceInterface server = new ServerServiceImpl();
            Naming.rebind("rmi://localhost:1099/ServerService", server);

            System.out.println("Server is running...");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

RMI Callback এর সুবিধা

  1. Two-Way Communication:
    এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকের যোগাযোগ সহজ করে।
  2. Real-Time Notifications:
    সার্ভার ক্লায়েন্টকে তাৎক্ষণিক তথ্য প্রদান করতে পারে।
  3. Flexibility:
    একাধিক ক্লায়েন্টকে রেজিস্টার করা যায় এবং সার্ভার তাদের আলাদাভাবে মেসেজ পাঠাতে পারে।

RMI Callback ব্যবহারের ক্ষেত্রে চ্যালেঞ্জ

  1. Security Concerns:
    Callback এর সময় সঠিক Security Manager ব্যবহার না করলে ক্লায়েন্ট ঝুঁকিতে থাকতে পারে।
  2. Performance Overhead:
    একাধিক ক্লায়েন্ট থাকলে মেসেজ ডেলিভারির সময় পারফরম্যান্স হ্রাস পেতে পারে।
  3. Firewall Issues:
    ক্লায়েন্ট-টু-সার্ভার কমিউনিকেশন ফায়ারওয়াল দ্বারা প্রভাবিত হতে পারে।

Java RMI Callback একটি শক্তিশালী পদ্ধতি যা RMI-তে Two-Way Communication এর জন্য ব্যবহৃত হয়। এটি রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট সিস্টেম, ইভেন্ট নোটিফিকেশন ইত্যাদিতে অত্যন্ত কার্যকর। সঠিক কনফিগারেশন এবং নিরাপত্তার মাধ্যমে RMI Callback পদ্ধতি ব্যবহার করা নিরাপদ ও কার্যকর।

Content added By
Promotion

Are you sure to start over?

Loading...