pring Messaging এবং WebSocket Integration

স্প্রিং (Spring) - Java Technologies

370

Spring Messaging এবং WebSocket হল দুটি গুরুত্বপূর্ণ প্রযুক্তি যা রিয়েল-টাইম অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। Spring Messaging একটি ইভেন্ট-ভিত্তিক মেসেজিং সিস্টেম প্রদান করে, যা অ্যাপ্লিকেশনের মধ্যে বার্তা পাঠানো এবং গ্রহণ করার জন্য ব্যবহৃত হয়। WebSocket হল একটি কমিউনিকেশন প্রোটোকল, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম, দুদিকী যোগাযোগ প্রতিষ্ঠা করে।

Spring Framework এই দুটি প্রযুক্তিকে সহজভাবে ইন্টিগ্রেট করতে সক্ষম করে, যাতে আপনি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন, নোটিফিকেশন সিস্টেম, এবং অন্যান্য ইন্টারঅ্যাকটিভ অ্যাপ্লিকেশন তৈরি করতে পারেন।

1. Spring Messaging

Spring Messaging হল Spring Framework এর একটি মডিউল, যা মেসেজ-ভিত্তিক আর্কিটেকচার তৈরি করতে সহায়তা করে। এটি বিশেষত message brokers এর সাথে ইন্টিগ্রেশন সহজ করে এবং বিভিন্ন ধরনের মেসেজিং সিস্টেম (যেমন AMQP, JMS, STOMP) সমর্থন করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজিং এর জন্য ইভেন্ট-ড্রিভেন পদ্ধতি সরবরাহ করে।


2. WebSocket এর ধারণা

WebSocket হল একটি কমিউনিকেশন প্রোটোকল, যা HTTP প্রোটোকলের ওপর ভিত্তি করে তৈরি, তবে এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে দুই-দিকী, পূর্ণ-ডুপ্লেক্স যোগাযোগ স্থাপন করে। WebSocket একটি কমিউনিকেশন চ্যানেল খোলে যা সার্ভার এবং ক্লায়েন্টের মধ্যে ডেটা দ্রুত এবং স্বচ্ছন্দে আদান প্রদান করতে সক্ষম। এটি বিশেষত রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট, গেমস, ট্র্যাকিং সিস্টেম ইত্যাদির জন্য উপকারী।


3. Spring Messaging এবং WebSocket Integration

Spring Framework WebSocket এবং Messaging এর মধ্যে শক্তিশালী ইন্টিগ্রেশন প্রদান করে। Spring WebSocketSpring Messaging এর সমন্বয়ে আমরা রিয়েল-টাইম যোগাযোগ স্থাপন করতে পারি।

3.1 Spring Boot WebSocket Integration

Spring WebSocket এবং Spring Messaging ব্যবহার করে একটি রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন তৈরি করা যায়। এই উদাহরণে, আমরা একটি খুব সহজ WebSocket চ্যাট অ্যাপ্লিকেশন তৈরি করব, যা Spring Boot, Spring Messaging, এবং WebSocket ব্যবহার করবে।

3.1.1 Maven ডিপেনডেন্সি

Spring Boot WebSocket ইন্টিগ্রেশন করতে আপনার pom.xml ফাইলে নিম্নলিখিত ডিপেনডেন্সি যোগ করতে হবে:

<dependencies>
    <!-- Spring Boot Starter WebSocket -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    
    <!-- Spring Boot Starter Messaging (STOMP) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-messaging</artifactId>
    </dependency>
</dependencies>

এখানে:

  • spring-boot-starter-websocket: WebSocket সমর্থন যোগ করার জন্য ব্যবহৃত হয়।
  • spring-boot-starter-messaging: Spring Messaging (STOMP) এর জন্য প্রয়োজনীয় ডিপেনডেন্সি।

3.1.2 WebSocket Configurations

Spring Boot WebSocket সেটআপ করতে, একটি কনফিগারেশন ক্লাস তৈরি করতে হবে যেখানে WebSocket এবং STOMP এর জন্য সার্ভার মেপিং করা হবে।

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // Set up the message broker to handle messages starting with "/topic"
        registry.enableSimpleBroker("/topic");
        // Define the prefix for messages from clients to server
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // Register the "/chat" endpoint for WebSocket connections
        registry.addEndpoint("/chat").withSockJS();
    }
}

এখানে:

  • @EnableWebSocketMessageBroker: এটি WebSocket এবং STOMP এর মাধ্যমে মেসেজিং সক্ষম করে।
  • configureMessageBroker(): এটি ক্লায়েন্ট থেকে সার্ভারে পাঠানো মেসেজের জন্য প্রিফিক্স (যেমন /app) এবং সার্ভারের প্রেরিত মেসেজের জন্য broker সেট করে।
  • registerStompEndpoints(): এটি /chat পাথ ব্যবহার করে WebSocket কনেকশন শুরু করার জন্য নির্দিষ্ট করে।

3.1.3 WebSocket Controller

Spring Messaging এর মাধ্যমে মেসেজ পাঠানোর জন্য একটি Controller তৈরি করতে হবে।

package com.example.demo.controller;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

@Controller
public class WebSocketController {

    private final SimpMessagingTemplate messagingTemplate;

    public WebSocketController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/sendMessage")
    public void sendMessage(String message) {
        // Broadcast the message to all subscribers to the "/topic/messages" channel
        messagingTemplate.convertAndSend("/topic/messages", message);
    }
}

এখানে:

  • @MessageMapping: এটি মেসেজ পাঠানোর জন্য টার্গেট মেথডটি নির্ধারণ করে। এই অ্যানোটেশনটি ক্লায়েন্ট থেকে /app/sendMessage এ মেসেজ পাঠানোর জন্য ব্যবহৃত হবে।
  • SimpMessagingTemplate: এটি Spring Messaging এর একটি ক্লাস যা মেসেজগুলিকে নির্দিষ্ট টপিক (যেমন /topic/messages) এ প্রেরণ করে।

3.1.4 WebSocket Client (HTML + JavaScript)

এখন, একটি ক্লায়েন্ট সাইড HTML এবং JavaScript তৈরি করা হবে যা WebSocket সার্ভারের সাথে কানেক্ট করবে এবং মেসেজ পাঠাবে ও গ্রহণ করবে।

<!DOCTYPE html>
<html>
<head>
    <title>Spring Boot WebSocket Chat</title>
    <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs@5.4.0"></script>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.5.1/dist/sockjs.min.js"></script>
</head>
<body>
    <h1>WebSocket Chat</h1>
    <input type="text" id="messageInput" placeholder="Type your message">
    <button onclick="sendMessage()">Send</button>

    <ul id="messages"></ul>

    <script>
        var stompClient = null;

        function connect() {
            var socket = new SockJS('/chat');
            stompClient = Stomp.over(socket);
            stompClient.connect({}, function(frame) {
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/messages', function(messageOutput) {
                    displayMessage(messageOutput.body);
                });
            });
        }

        function sendMessage() {
            var message = document.getElementById("messageInput").value;
            stompClient.send("/app/sendMessage", {}, message);
            document.getElementById("messageInput").value = '';
        }

        function displayMessage(message) {
            var messages = document.getElementById("messages");
            var messageElement = document.createElement("li");
            messageElement.textContent = message;
            messages.appendChild(messageElement);
        }

        // Establish WebSocket connection
        connect();
    </script>
</body>
</html>

এখানে:

  • SockJS এবং STOMP এর মাধ্যমে ক্লায়েন্ট WebSocket সার্ভারে সংযুক্ত হবে।
  • /app/sendMessage এ মেসেজ পাঠানোর জন্য stompClient.send() ব্যবহার করা হয়।
  • /topic/messages এ সবার জন্য ব্রডকাস্ট করা মেসেজ গ্রহণ করা হয়।

4. সারাংশ

Spring WebSocket এবং Spring Messaging এর মাধ্যমে আপনি খুব সহজেই রিয়েল-টাইম কমিউনিকেশন তৈরি করতে পারেন। WebSocket দুটি পয়েন্টের মধ্যে কমিউনিকেশন চ্যানেল তৈরি করে, যেখানে ক্লায়েন্ট এবং সার্ভার উভয়ে একে অপরের সাথে দ্রুত মেসেজ আদান-প্রদান করতে পারে। Spring এর সাহায্যে, আপনি STOMP প্রোটোকল ব্যবহার করে সহজেই Spring Messaging ইন্টিগ্রেশন করতে পারেন এবং রিয়েল-টাইম চ্যাট অ্যাপ্লিকেশন বা নোটিফিকেশন সিস্টেম তৈরি করতে পারেন। Spring এর @MessageMapping এবং SimpMessagingTemplate এর সাহায্যে এটি খুবই সহজ হয়ে ওঠে।

Content added By

Spring Framework এ Messaging এবং WebSocket Integration

স্প্রিং ফ্রেমওয়ার্কে Messaging এবং WebSocket ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলির মধ্যে কমিউনিকেশন (communication) সহজে এবং কার্যকরীভাবে পরিচালনা করা যায়। Messaging ব্যবহারের মাধ্যমে অ্যাপ্লিকেশনগুলো একে অপরের সাথে মেসেজ আদান-প্রদান করতে পারে, যেখানে WebSocket ব্যবহার করে রিয়েল-টাইম, দুই-দিকে (two-way) যোগাযোগ সম্ভব হয়।

স্প্রিং এই দুটি প্রযুক্তিকে সমর্থন করে এবং বিভিন্ন ইন্টিগ্রেশন মডিউল সরবরাহ করে। এই টিউটোরিয়ালে আমরা স্প্রিং ফ্রেমওয়ার্কে Messaging এবং WebSocket এর সংমিশ্রণ দেখব এবং কীভাবে এগুলোকে স্প্রিং অ্যাপ্লিকেশনে ব্যবহার করা যায় তা বিশ্লেষণ করব।


Spring Messaging: Introduction and Integration

Spring Messaging হলো একটি API যা অ্যাপ্লিকেশনগুলোর মধ্যে মেসেজ আদান-প্রদান সহজ করে তোলে। এটি MessageQueue বা MessageBroker সিস্টেমের সাথে একত্রিত হয়ে স্প্রিং অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগের পদ্ধতি সরবরাহ করে। স্প্রিং মেসেজিং প্রাথমিকভাবে JMS (Java Message Service), AMQP (Advanced Message Queuing Protocol) এবং STOMP (Simple Text Oriented Messaging Protocol) সমর্থন করে।

Spring Messaging সাধারণত ব্যবহার করা হয়:

  • Asynchronous Messaging: একাধিক সিস্টেম বা কম্পোনেন্টের মধ্যে মেসেজ পাঠানো এবং গ্রহণ করা।
  • Decoupling: প্রেরক এবং গ্রহণকারী একে অপরের সঙ্গে সরাসরি যোগাযোগ না করে, মেসেজ ব্রোকারের মাধ্যমে যোগাযোগ করে।
  • Event-driven Communication: অ্যাপ্লিকেশনগুলির মধ্যে ইভেন্ট ভিত্তিক যোগাযোগ প্রতিষ্ঠা করা।

Spring Messaging Integration Example

স্প্রিং মেসেজিং ব্যবহার করে একটি অ্যাপ্লিকেশন কনফিগারেশন দেখানো হচ্ছে যেখানে STOMP প্রোটোকল এবং RabbitMQ মেসেজ ব্রোকার ব্যবহার করা হচ্ছে।

pom.xml Dependencies:
<dependencies>
    <!-- Spring Boot WebSocket and Messaging dependencies -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-activemq</artifactId>
    </dependency>
</dependencies>
WebSocket Configuration:
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // Enable a simple in-memory message broker to carry the response messages back to the client on destinations prefixed with "/topic"
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // Register the "/hello" WebSocket endpoint to allow connections to it
        registry.addEndpoint("/hello").withSockJS();
    }
}
Controller for WebSocket Messaging:
import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
public class WebSocketController {

    @MessageMapping("/hello")
    @SendTo("/topic/greetings")
    public String greeting(String message) throws Exception {
        return "Hello, " + message + "!";
    }
}
WebSocket Client:
<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Example</title>
    <script src="https://cdn.jsdelivr.net/npm/@stomp/stompjs@5.4.0/dist/stomp.umd.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/sockJS-client@1.5.1/dist/sockjs.min.js"></script>
    <script>
        var stompClient = null;

        function connect() {
            var socket = new SockJS('/hello');
            stompClient = Stomp.over(socket);
            stompClient.connect({}, function (frame) {
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/greetings', function (greeting) {
                    alert(greeting.body);
                });
            });
        }

        function sendMessage() {
            stompClient.send("/app/hello", {}, "World");
        }
    </script>
</head>
<body>
    <h2>WebSocket Example</h2>
    <button onclick="connect()">Connect</button>
    <button onclick="sendMessage()">Send Message</button>
</body>
</html>

এই উদাহরণে:

  • WebSocketConfig ক্লাসে আমরা WebSocket এবং STOMP কনফিগারেশন করেছি।
  • WebSocketController-এ একটি মেসেজিং লজিক তৈরি করেছি যা "/hello" পাথের মাধ্যমে ক্লায়েন্ট থেকে মেসেজ গ্রহণ করে এবং /topic/greetings পাথের মাধ্যমে রিপ্লাই পাঠায়।
  • ক্লায়েন্ট HTML কোডে SockJS এবং STOMP লাইব্রেরি ব্যবহার করে WebSocket এর সাথে সংযোগ স্থাপন করা হয়েছে এবং মেসেজ পাঠানো হচ্ছে।

Spring WebSocket Integration

স্প্রিং WebSocket এর মাধ্যমে real-time, two-way communication (দুই-মুখী যোগাযোগ) সম্ভব হয়, যা আধুনিক ওয়েব অ্যাপ্লিকেশনগুলির জন্য অত্যন্ত গুরুত্বপূর্ণ। স্প্রিং WebSocket স্ট্যান্ডার্ড ব্যবহার করে, আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করতে পারেন, যেটি সাধারণ HTTP কলের চেয়ে অনেক দ্রুত এবং কার্যকরী।

WebSocket Advantages:

  1. Real-time Communication: ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত, রিয়েল-টাইম যোগাযোগ সক্ষম করে।
  2. Full-duplex Communication: একসাথে ডেটা পাঠানো এবং গ্রহণ করা সম্ভব।
  3. Low Latency: HTTP রিকোয়েস্টের তুলনায় অনেক কম সময় ব্যয় করে।

Spring WebSocket ব্যবহার করার সুবিধা:

  1. Real-time Messaging: ব্যবহারকারীদের রিয়েল-টাইম মেসেজ পাঠানো এবং গ্রহণ করা সম্ভব, যা চ্যাট অ্যাপ্লিকেশন, গেমস, ট্রেডিং প্ল্যাটফর্মে ব্যবহারযোগ্য।
  2. Scalable: বড় পরিসরে ডিস্ট্রিবিউটেড সিস্টেমের জন্য এটি ব্যবহারযোগ্য।
  3. Efficient Communication: HTTP-এর তুলনায় এটি কম ব্যান্ডউইথ ব্যবহার করে।

সারাংশ

Spring Messaging এবং WebSocket স্প্রিং ফ্রেমওয়ার্কের শক্তিশালী বৈশিষ্ট্য, যা রিয়েল-টাইম এবং অ্যাসিঙ্ক্রোনাস যোগাযোগের জন্য ব্যবহৃত হয়। স্প্রিং মেসেজিং STOMP, JMS, এবং AMQP এর মতো প্রোটোকল ব্যবহার করে, এবং স্প্রিং WebSocket দুই-দিকে (two-way) যোগাযোগের জন্য ব্যবহৃত হয়। এই দুটি টেকনোলজি একত্রে ব্যবহার করলে রিয়েল-টাইম ডেটা শেয়ারিং, চ্যাট, বা ট্রেডিং অ্যাপ্লিকেশনগুলির জন্য খুবই কার্যকরী হবে।

Content added By

WebSocket হলো একটি পূর্ণ-ডুপ্লেক্স (full-duplex) যোগাযোগ প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে একটি স্থিতিশীল কানেকশন স্থাপন করে। এটি সাধারণ HTTP রিকোয়েস্ট-রেসপন্স মডেল থেকে বেরিয়ে আসতে সাহায্য করে এবং রিয়েল-টাইম, ইন্টারঅ্যাকটিভ অ্যাপ্লিকেশন তৈরি করার জন্য উপযুক্ত। স্প্রিং ফ্রেমওয়ার্ক WebSocket সমর্থন প্রদান করে, যেখানে STOMP (Simple Text Oriented Messaging Protocol) এবং SockJS দুটি গুরুত্বপূর্ণ প্রযুক্তি।

STOMP একটি মেসেজিং প্রোটোকল যা WebSocket এর উপর ভিত্তি করে বার্তা আদান-প্রদান করার জন্য ব্যবহৃত হয় এবং SockJS একটি লাইব্রেরি যা WebSocket এর জন্য fallback মেকানিজম প্রদান করে যখন WebSocket নেটওয়ার্কে ব্যবহৃত হতে পারে না।

Spring WebSocket API STOMP এবং SockJS এর মাধ্যমে সহজে রিয়েল-টাইম মেসেজিং সমর্থন করতে পারে।


STOMP কি এবং কেন এটি ব্যবহৃত হয়?

STOMP (Simple Text Oriented Messaging Protocol) একটি মেসেজিং প্রোটোকল যা টেক্সট-ভিত্তিক বার্তা আদান-প্রদান করার জন্য ব্যবহৃত হয়। এটি বিভিন্ন মেসেজিং সার্ভিস এবং অ্যাপ্লিকেশনগুলির মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়। STOMP মেসেজগুলো text frame আকারে প্রেরিত হয়, এবং এটির মাধ্যমে ক্লায়েন্ট এবং সার্ভার মধ্যে সহজে বার্তা আদান-প্রদান করা সম্ভব।

Spring Framework STOMP প্রোটোকলকে WebSocket এর সাথে সংযুক্ত করে। STOMP-এর মাধ্যমে, ক্লায়েন্ট এবং সার্ভার রিয়েল-টাইম মেসেজ আদান-প্রদান করতে সক্ষম হয়।


SockJS কি এবং কেন এটি ব্যবহৃত হয়?

SockJS একটি JavaScript লাইব্রেরি যা WebSocket প্রোটোকলকে fallback করে এবং তার মাধ্যমে এটি নেটওয়ার্ক পরিস্থিতি অনুযায়ী অন্য যোগাযোগ প্রোটোকলে চলে যেতে পারে, যেমন XHR polling, iframe-based polling, বা long polling। এটি বিশেষত ক্লায়েন্টের ব্রাউজারে WebSocket সাপোর্ট না থাকলে কাজে আসে এবং এটি WebSocket কানেকশন ব্যবহারের জন্য একটি নির্ভরযোগ্য বিকল্প প্রদান করে।


Spring WebSocket, STOMP এবং SockJS ব্যবহার করে Communication Setting

Spring WebSocket, STOMP এবং SockJS ব্যবহার করে রিয়েল-টাইম মেসেজিং চালাতে হলে, নিম্নলিখিত ধাপগুলো অনুসরণ করতে হবে:

১. Spring WebSocket Configurations

প্রথমেই, Spring Boot অ্যাপ্লিকেশনে WebSocket কনফিগারেশন সেটআপ করতে হবে। Spring Boot অ্যাপ্লিকেশনে @EnableWebSocket এবং @Configuration অ্যানোটেশন ব্যবহার করে WebSocket কনফিগার করা হয়।

WebSocketConfig ক্লাস
package com.example.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // Enable a simple memory-based message broker to carry messages back to the client on destination prefixed with "/topic"
        config.enableSimpleBroker("/topic");
        // Application destination prefix (i.e. /app)
        config.setApplicationDestinationPrefixes("/app");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // Register STOMP endpoint and map it to "/gs-guide-websocket"
        registry.addEndpoint("/gs-guide-websocket")
                .setAllowedOrigins("*") // Allows connections from any domain
                .withSockJS(); // Enable SockJS support for fallback options
    }
}

এখানে:

  • @EnableWebSocketMessageBroker: এটি WebSocket message broker সক্রিয় করে, যাতে STOMP পদ্ধতিতে বার্তা প্রেরণ করা সম্ভব হয়।
  • configureMessageBroker: এটি STOMP এবং WebSocket এর মাধ্যমে সঠিক মেসেজিং প্রোটোকল কনফিগার করে।
  • registerStompEndpoints: এটি WebSocket কানেকশন এন্ডপয়েন্ট (যেমন /gs-guide-websocket) নিবন্ধন করে এবং SockJS সমর্থন যোগ করে।

২. Controller Setup for Sending/Receiving Messages

এখন, একটি Controller তৈরি করতে হবে যা STOMP এবং WebSocket এর মাধ্যমে বার্তা পাঠাবে এবং গ্রহণ করবে।

WebSocketController ক্লাস
package com.example.controller;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.simp.SimpMessagingTemplate;
import org.springframework.stereotype.Controller;

@Controller
public class WebSocketController {

    private final SimpMessagingTemplate messagingTemplate;

    public WebSocketController(SimpMessagingTemplate messagingTemplate) {
        this.messagingTemplate = messagingTemplate;
    }

    @MessageMapping("/send/message")
    public void sendMessage(String message) {
        // Send the message to all connected users
        messagingTemplate.convertAndSend("/topic/messages", message);
    }
}

এখানে:

  • @MessageMapping: এটি STOMP এর মেসেজ মাপিংয়ের জন্য ব্যবহৃত হয়। যখন একটি মেসেজ /send/message এ আসবে, তখন এটি sendMessage() মেথডে পৌঁছাবে।
  • SimpMessagingTemplate.convertAndSend: এটি মেসেজটি /topic/messages এ পাঠিয়ে দেয়, যা WebSocket ক্লায়েন্টদের কাছে পৌঁছায়।

৩. Client-Side (HTML + JavaScript)

এখন, STOMP এবং SockJS ব্যবহার করে ক্লায়েন্ট সাইডে মেসেজ পাঠানো এবং গ্রহণ করা হবে। এখানে একটি HTML পৃষ্ঠা এবং JavaScript কোড দেখানো হল।

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Spring WebSocket and STOMP Example</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/sockjs-client/1.5.1/sockjs.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
</head>
<body>
    <h1>Spring WebSocket and STOMP</h1>
    <div>
        <input type="text" id="message" placeholder="Type a message">
        <button onclick="sendMessage()">Send</button>
    </div>
    <div id="messages"></div>

    <script>
        // Connect to the WebSocket server
        var socket = new SockJS('/gs-guide-websocket');
        var stompClient = Stomp.over(socket);

        // Connect to the STOMP server
        stompClient.connect({}, function(frame) {
            console.log('Connected: ' + frame);

            // Subscribe to the topic to receive messages
            stompClient.subscribe('/topic/messages', function(message) {
                var messagesDiv = document.getElementById('messages');
                messagesDiv.innerHTML += "<p>" + message.body + "</p>";
            });
        });

        // Send a message via STOMP
        function sendMessage() {
            var message = document.getElementById('message').value;
            stompClient.send("/app/send/message", {}, message);
        }
    </script>
</body>
</html>

এখানে:

  • SockJS এবং STOMP লাইব্রেরি ব্যবহার করে ক্লায়েন্ট WebSocket সার্ভারের সাথে সংযোগ স্থাপন করে।
  • stompClient.connect: এটি STOMP সার্ভারের সাথে সংযোগ তৈরি করে।
  • stompClient.subscribe: এটি /topic/messages এর সাথে সাবস্ক্রাইব করে, যেখানে সার্ভার মেসেজ পাঠাবে।
  • stompClient.send: এটি মেসেজটি STOMP সার্ভারে পাঠায়, যা পরে /topic/messages এ পৌঁছায়।

Spring WebSocket Communication এর সুবিধা

  1. Real-Time Communication: WebSocket ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম, পূর্ণ-ডুপ্লেক্স (Full-Duplex) যোগাযোগ সহজে করা সম্ভব।
  2. Scalability: STOMP এবং SockJS ব্যবহার করে আপনি একাধিক ক্লায়েন্টের সাথে মেসেজিং করতে পারেন, যা বড় আকারের সিস্টেমে কার্যকর।
  3. Fallback Mechanism: SockJS ব্রাউজার যে কোনো কারণে WebSocket সাপোর্ট না করলে স্বয়ংক্রিয়ভাবে অন্য যোগাযোগ পদ্ধতিতে স্যুইচ করতে সহায়তা করে।
  4. Low Latency: WebSocket সংযোগটি ক্লায়েন্ট এবং সার্ভারের মধ্যে স্থায়ীভাবে খোলা থাকে, তাই মেসেজ প্রেরণ এবং গ্রহণ করার সময় দেরি হয় না।

সারাংশ

Spring WebSocket, STOMP এবং SockJS ব্যবহার করে রিয়েল-টাইম মেসেজিং সেটআপ করা যায় যেখানে WebSocket ক্লায়েন্ট এবং সার্ভারের মধ্যে সংযোগ স্থাপন করা হয় এবং মেসেজ আদান-প্রদান করা হয়। STOMP প্রোটোকল মেসেজিং সার্ভিসের জন্য ব্যবহার করা হয়, এবং SockJS ব্রাউজারে WebSocket সাপোর্ট না থাকলে fallback পদ্ধতি সরবরাহ করে। Spring Boot এ এটি সহজে কনফিগার এবং ইমপ্লিমেন্ট করা যায়, যা রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট সিস্টেম বা লাইভ আপডেট সিস্টেম তৈরির জন্য উপযোগী।

Content added By

WebSocket হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডুপ্লেক্স (two-way) যোগাযোগ প্রতিষ্ঠা করতে সহায়তা করে। এটি HTTP প্রোটোকলের উপর ভিত্তি করে কাজ করে, তবে একবার সংযোগ স্থাপন হলে, এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে স্থায়ী সংযোগ ধরে রাখে, যার মাধ্যমে দ্রুত এবং রিয়েল-টাইম ডেটা প্রেরণ করা সম্ভব হয়।

Spring WebSocket ইন্টিগ্রেশন Spring Framework এর মাধ্যমে WebSocket প্রটোকলের ব্যবহারের জন্য একটি শক্তিশালী এবং সহজ উপায় প্রদান করে। Spring WebSocket ইন্টিগ্রেশন ব্যবহার করে আপনি অ্যাপ্লিকেশনগুলিতে রিয়েল-টাইম, ডুপ্লেক্স, এবং পুশ প্রযুক্তির সমর্থন তৈরি করতে পারেন, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ স্টক মার্কেট, রিয়েল-টাইম নোটিফিকেশন ইত্যাদি।

এই টিউটোরিয়ালে আমরা Spring WebSocket Integration এর ব্যবহার এবং কনফিগারেশন দেখব।


Spring WebSocket Integration এর প্রধান উপাদানসমূহ

  1. WebSocketConfiguration: Spring WebSocket সাপোর্ট কনফিগার করতে একটি কনফিগারেশন ক্লাস তৈরি করা হয়।
  2. WebSocketHandler: এটি WebSocket মেসেজ হ্যান্ডলারের দায়িত্ব পালন করে, যা ক্লায়েন্ট থেকে আসা মেসেজ প্রক্রিয়া করে এবং রেসপন্স পাঠায়।
  3. WebSocketEndpoint: এটি WebSocket সংযোগ প্রতিষ্ঠা এবং ক্লায়েন্টের সাথে যোগাযোগ পরিচালনা করতে ব্যবহৃত হয়।

Step 1: Spring WebSocket স্টার্টার ডিপেনডেন্সি

প্রথমেই, Spring WebSocket ফিচারটি ব্যবহার করার জন্য spring-boot-starter-websocket ডিপেনডেন্সি প্রোজেক্টে যোগ করতে হবে।

Maven ডিপেনডেন্সি

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>

Gradle ডিপেনডেন্সি

implementation 'org.springframework.boot:spring-boot-starter-websocket'

Step 2: WebSocket কনফিগারেশন

Spring WebSocket কনফিগার করতে একটি কনফিগারেশন ক্লাস তৈরি করতে হয়, যেখানে @EnableWebSocket অ্যানোটেশনটি ব্যবহার করা হয়। এখানে WebSocketEndPoint এবং Handler কনফিগার করা হয়।

উদাহরণ: WebSocket কনফিগারেশন ক্লাস

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler(), "/chat")
                .setAllowedOrigins("*"); // Allow connections from any origin
    }

    @Bean
    public WebSocketHandler webSocketHandler() {
        return new WebSocketHandlerImpl();
    }
}

এখানে:

  • @EnableWebSocket: এটি Spring WebSocket সাপোর্ট সক্রিয় করে।
  • registerWebSocketHandlers: এখানে WebSocket এর জন্য এন্ডপয়েন্ট /chat সেট করা হয়েছে এবং webSocketHandler() কে যুক্ত করা হয়েছে।
  • setAllowedOrigins("*"): এই পদ্ধতিটি সমস্ত উৎস থেকে WebSocket কানেকশন অনুমোদন করে।

Step 3: WebSocketHandler তৈরি করা

WebSocketHandler হল একটি ইন্টারফেস যা WebSocket সেশন পরিচালনা করে এবং ক্লায়েন্টের মেসেজ প্রক্রিয়া করে। WebSocketHandler ইন্টারফেসের একটি কাস্টম ইমপ্লিমেন্টেশন তৈরি করা হয়।

উদাহরণ: WebSocketHandler কাস্টম ইমপ্লিমেন্টেশন

public class WebSocketHandlerImpl implements WebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // নতুন সংযোগের সময়, এখানে কিছু প্রক্রিয়া করা যেতে পারে
        System.out.println("Connection established with " + session.getId());
    }

    @Override
    public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
        // ক্লায়েন্ট থেকে আসা মেসেজ হ্যান্ডল করা
        System.out.println("Received message: " + message.getPayload());
        session.sendMessage(new TextMessage("Hello, client!")); // ক্লায়েন্টকে রিপ্লাই পাঠানো
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        // ট্রান্সপোর্ট সম্পর্কিত কোনো ত্রুটি হলে এখানে হ্যান্ডল করা হয়
        System.out.println("Error: " + exception.getMessage());
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        // সংযোগ বন্ধ হলে এখানে কিছু করা যেতে পারে
        System.out.println("Connection closed with " + session.getId());
    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}

এখানে:

  • afterConnectionEstablished: নতুন WebSocket সংযোগ তৈরি হলে এটি কার্যকর হবে।
  • handleMessage: ক্লায়েন্ট থেকে আসা মেসেজ প্রক্রিয়া করে এবং ক্লায়েন্টকে রিপ্লাই পাঠায়।
  • handleTransportError: যদি WebSocket ট্রান্সপোর্টে কোনো সমস্যা হয়, তবে এটি প্রক্রিয়া করে।
  • afterConnectionClosed: সংযোগ বন্ধ হলে এর মধ্যে কিছু কার্যকলাপ করা যায়।

Step 4: WebSocket Controller (Optional)

Spring WebSocket এর সাথে আপনি @Controller ব্যবহার করে WebSocket মেসেজের জন্য একটি কন্ট্রোলারও তৈরি করতে পারেন। যদিও এটা ঐচ্ছিক, তবে এটি WebSocket মেসেজ হ্যান্ডলিং আরও পরিষ্কার এবং সহজ করে।

উদাহরণ: WebSocketController

@Controller
public class WebSocketController {

    @MessageMapping("/sendMessage")
    @SendTo("/topic/messages")
    public String sendMessage(String message) throws Exception {
        // ক্লায়েন্ট থেকে আসা মেসেজ প্রসেস করা
        return "Hello, " + message;
    }
}

এখানে:

  • @MessageMapping: এই অ্যানোটেশনটি WebSocket এর URL ম্যাপিংয়ের জন্য ব্যবহৃত হয়। এটি ক্লায়েন্টের মেসেজ রিসিভ করে।
  • @SendTo: এটি ক্লায়েন্টের মেসেজ পাঠানোর জন্য নির্দিষ্ট টপিকে রেডিরেক্ট করে।

Step 5: WebSocket Client (JavaScript)

WebSocket সার্ভারটি ব্যবহার করতে, JavaScript এর মাধ্যমে ক্লায়েন্টে সংযোগ স্থাপন করা হয়। Spring WebSocket সার্ভারের সঙ্গে JavaScript ক্লায়েন্টটি সংযুক্ত হয়ে মেসেজ প্রেরণ করতে পারে।

উদাহরণ: WebSocket Client (JavaScript)

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
    <script type="text/javascript">
        var socket = new WebSocket("ws://localhost:8080/chat");

        socket.onopen = function() {
            console.log("Connected to WebSocket server");
            socket.send("Hello from client!");
        };

        socket.onmessage = function(event) {
            console.log("Received message: " + event.data);
        };

        socket.onerror = function(error) {
            console.log("WebSocket Error: " + error);
        };

        socket.onclose = function() {
            console.log("Disconnected from WebSocket server");
        };
    </script>
</head>
<body>
    <h2>WebSocket Client</h2>
</body>
</html>

এখানে:

  • JavaScript WebSocket API ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করা হয়েছে এবং ক্লায়েন্ট থেকে মেসেজ পাঠানো হয়েছে।

সারাংশ

Spring WebSocket Integration ব্যবহার করে আপনি Spring Framework-এ রিয়েল-টাইম, ডুপ্লেক্স যোগাযোগ সক্ষম করতে পারেন। Spring WebSocket এর মাধ্যমে, আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে একযোগে যোগাযোগ স্থাপন করতে পারেন এবং মেসেজ আদান-প্রদান করতে পারেন।

এই টিউটোরিয়ালে:

  • WebSocketConfigurer ব্যবহার করে WebSocket কনফিগারেশন করা হয়েছে।
  • WebSocketHandler ব্যবহার করে ক্লায়েন্টের মেসেজ হ্যান্ডল করা হয়েছে।
  • WebSocketController ব্যবহার করে WebSocket মেসেজ ক্লায়েন্টের কাছে পাঠানো হয়েছে।
  • JavaScript ক্লায়েন্টের মাধ্যমে WebSocket সার্ভারের সঙ্গে যোগাযোগ স্থাপন করা হয়েছে।

Spring WebSocket Integration আপনার অ্যাপ্লিকেশনে রিয়েল-টাইম যোগাযোগ এবং পুশ প্রযুক্তি ইন্টিগ্রেশন করতে সাহায্য করে, যেমন চ্যাট সিস্টেম, লাইভ ট্র্যাকিং ইত্যাদি।

Content added By
Promotion

Are you sure to start over?

Loading...