Spring MVC এবং WebSocket Integration

Java Technologies - স্প্রিং এমভিসি (Spring MVC)
112
112

Spring MVC এবং WebSocket ইন্টিগ্রেটেশন আপনাকে রিয়েল-টাইম, ডুয়াল-ডিরেকশনাল (bi-directional) যোগাযোগের সুবিধা দেয়, যেখানে ক্লায়েন্ট এবং সার্ভার একে অপরকে মেসেজ পাঠাতে পারে। WebSocket ব্যবহার করে আপনি HTTP রিকোয়েস্ট এবং রেসপন্স ছাড়া স্থায়ী সংযোগ স্থাপন করতে পারবেন, যা রিয়েল-টাইম অ্যাপ্লিকেশন যেমন চ্যাট, গেম, নোটিফিকেশন ইত্যাদি তৈরি করতে সহায়ক।

Spring MVC এবং WebSocket ইন্টিগ্রেটেশন:

Spring WebSocket ব্যবহারের জন্য Spring MVC তে কিছু কনফিগারেশন এবং কম্পোনেন্ট তৈরি করতে হবে। Spring 4.0 এবং তার পরবর্তী সংস্করণে WebSocket API সমর্থন করা হয়।

এখানে আমি একটি সাধারণ Spring MVC এবং WebSocket ইন্টিগ্রেটেশন এর উদাহরণ দেখাচ্ছি।


Step 1: Maven Dependencies

প্রথমে, আপনার pom.xml ফাইলে WebSocket এবং Spring MVC এর জন্য নির্ভরতাগুলি যোগ করুন:

<dependencies>
    <!-- Spring WebSocket dependency -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-websocket</artifactId>
        <version>5.3.9</version> <!-- Use the latest version -->
    </dependency>

    <!-- Spring Web Starter (for Spring MVC) -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot WebSocket support -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>
</dependencies>
  • spring-websocket: WebSocket সার্ভিসের জন্য প্রয়োজনীয় ক্লাস এবং API প্রদান করে।
  • spring-boot-starter-websocket: Spring Boot WebSocket কনফিগারেশন সরবরাহ করে।

Step 2: Enable WebSocket in Spring Configuration

Spring MVC-তে WebSocket সক্রিয় করতে @Configuration ক্লাসে WebSocket কনফিগারেশন যোগ করুন।

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.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // Enable the simple broker for message routing
        config.enableSimpleBroker("/topic", "/queue");  // Subscription prefixes
        config.setApplicationDestinationPrefixes("/app"); // Prefix for send-to destination
    }

    @Override
    public void registerStompEndpoints(org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry registry) {
        // Register WebSocket endpoint (client will connect to this URL)
        registry.addEndpoint("/chat").withSockJS();  // The WebSocket URL is "/chat"
    }
}

Explanation:

  • @EnableWebSocketMessageBroker: WebSocket এর জন্য বার্তা ব্রোকার সক্রিয় করে। এটি WebSocket-এ ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজ পাঠানোর জন্য ব্যবহৃত হয়।
  • configureMessageBroker(): এখানে আপনি মেসেজ ব্রোকার কনফিগার করতে পারেন এবং নির্দিষ্ট destination prefixes এবং broker prefixes সেট করতে পারেন।
  • registerStompEndpoints(): এটি STOMP (Simple Text Oriented Messaging Protocol) প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে WebSocket সংযোগের জন্য একটি এন্ডপয়েন্ট নিবন্ধিত করে। এটি SockJS সমর্থন করে, যা ক্লায়েন্টদের ব্রাউজারের সাথে সংযোগ করতে সহায়ক।

Step 3: Create a WebSocket Controller

এখন একটি কন্ট্রোলার তৈরি করুন যা WebSocket মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে বার্তা আদান-প্রদান করবে।

package com.example.controller;

import org.springframework.messaging.handler.annotation.MessageMapping;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Controller;

@Controller
public class WebSocketController {

    // This method handles incoming messages and sends a response back to the client
    @MessageMapping("/sendMessage")  // This maps the client message to this method
    @SendTo("/topic/messages")  // Send the response to the /topic/messages topic
    public String sendMessage(String message) {
        return "Server received: " + message;  // Message to be sent to the clients
    }
}

Explanation:

  • @MessageMapping: এটি ক্লায়েন্ট থেকে আসা মেসেজকে মেথডে ম্যাপ করে। এখানে /sendMessage হল মেসেজ পাঠানোর জন্য নির্দিষ্ট URL বা প্রোপার্টি।
  • @SendTo: এটি একটি নির্দিষ্ট টপিকে (যেমন /topic/messages) মেসেজ পাঠায়, যেখানে ক্লায়েন্টরা সাবস্ক্রাইব করবে।

Step 4: Create HTML and JavaScript for WebSocket Communication

এখন HTML ফাইল তৈরি করুন যেখানে WebSocket যোগাযোগ তৈরি হবে এবং ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানো হবে।

chat.html (Frontend)

<!DOCTYPE html>
<html>
<head>
    <title>Spring WebSocket Chat</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>

    <h2>WebSocket Chat</h2>
    
    <div>
        <input type="text" id="messageInput" placeholder="Enter your message" />
        <button onclick="sendMessage()">Send Message</button>
    </div>
    
    <h3>Messages:</h3>
    <ul id="messageList"></ul>

    <script>
        var stompClient = null;

        // Connect to WebSocket and start receiving messages
        function connect() {
            var socket = new SockJS('/chat');  // Connect to the WebSocket endpoint
            stompClient = Stomp.over(socket);
            
            stompClient.connect({}, function(frame) {
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/messages', function(message) {
                    showMessage(message.body);  // Display the received message
                });
            });
        }

        // Send message to the server
        function sendMessage() {
            var message = document.getElementById('messageInput').value;
            stompClient.send("/app/sendMessage", {}, message);  // Send message to the server via WebSocket
            document.getElementById('messageInput').value = '';  // Clear the input field
        }

        // Show the received message in the list
        function showMessage(message) {
            var messageList = document.getElementById('messageList');
            var listItem = document.createElement('li');
            listItem.textContent = message;
            messageList.appendChild(listItem);
        }

        // Establish WebSocket connection when page loads
        connect();
    </script>

</body>
</html>

Explanation:

  • SockJS: এটি WebSocket কনেকশন স্থাপনে সহায়ক একটি লাইব্রেরি, যা ব্রাউজারের WebSocket সমর্থন না থাকলে ফ্যালব্যাক হিসেবে কাজ করবে।
  • STOMP: এটি Simple Text Oriented Messaging Protocol যা WebSocket এর উপর চলা মেসেজ প্রোটোকল। এখানে আমরা STOMP.js ব্যবহার করে মেসেজ পাঠাচ্ছি এবং গ্রহণ করছি।
  • /chat: এটি WebSocket এন্ডপয়েন্ট যেখানে ক্লায়েন্ট সংযোগ করবে।
  • /app/sendMessage: এটি সেই URL যেটি ক্লায়েন্ট থেকে মেসেজ পাঠাবে। @MessageMapping("/sendMessage") এই URL এর সাথে ম্যাপ করা হয়েছে।

Step 5: Run and Test the Application

  1. Run your Spring Boot application.
  2. Open the chat.html page in your browser.
  3. Send messages from the input field, and you will see them displayed in real-time.

Conclusion

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

Content added By

WebSocket কি এবং এর কাজ

95
95

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

WebSocket এর প্রধান সুবিধা হলো এটি HTTP রিকোয়েস্টের মতো নতুন কানেকশন খুলে না, বরং একটি একক কানেকশন তৈরি করে যার মাধ্যমে বারবার ডাটা আদান-প্রদান সম্ভব।


WebSocket এর মূল বৈশিষ্ট্য:

  1. Full-Duplex Communication:
    • WebSocket একে অপরকে একসাথে পাঠানোর অনুমতি দেয়। সার্ভার এবং ক্লায়েন্ট একে অপরকে ডাটা পাঠাতে পারে যখনই প্রয়োজন হয়, এবং এটি সম্পূর্ণ অপ্রতিরোধ্য।
  2. Persistent Connection:
    • একবার কানেকশন স্থাপিত হলে তা সার্ভার এবং ক্লায়েন্টের মধ্যে দীর্ঘসময় ধরে চলে, নতুন HTTP কানেকশন তৈরি করার দরকার নেই।
  3. Low Latency:
    • HTTP প্রোটোকলের তুলনায় WebSocket কম দেরিতে রেসপন্স করে, কারণ বার্তা বারবার হ্যান্ডশেক করতে হয় না।
  4. Scalable and Efficient:
    • WebSocket সার্ভারটি সংযোগগুলিকে দীর্ঘসময় ধরে রাখতে সক্ষম, এবং ছোট, স্ন্যাপি ডাটাগুলি প্রেরণ করতে পারে, যা বায়ন্ডিং এবং ব্রডকাস্টিং অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত।

WebSocket এর কাজ কীভাবে হয়?

WebSocket এর কাজের প্রক্রিয়াটি নিম্নরূপ:

  1. Handshake:
    • ক্লায়েন্ট একটি HTTP রিকোয়েস্ট (WebSocket handshake) সার্ভারে পাঠায় এবং একে WebSocket কানেকশনে রূপান্তরিত করা হয়।
  2. Connection Establishment:
    • সার্ভার যখন HTTP হ্যান্ডশেক রিকোয়েস্ট গ্রহণ করে, তখন একটি WebSocket কানেকশন স্থাপন করে। এর পরপরই সার্ভার এবং ক্লায়েন্ট উভয়েই একে অপরের সাথে ডাটা পাঠাতে পারে।
  3. Full-Duplex Communication:
    • কানেকশন স্থাপন হওয়ার পর, সার্ভার এবং ক্লায়েন্ট একে অপরের সাথে ডাটা আদান-প্রদান করতে পারে, এবং এই ডাটা একসাথে উভয় পক্ষ থেকে পাঠানো এবং গ্রহণ করা যায়।
  4. Closure:
    • যখন ক্লায়েন্ট অথবা সার্ভার একটি শেষ সিগন্যাল পাঠায়, তখন WebSocket কানেকশনটি বন্ধ হয়ে যায়।

Spring MVC তে WebSocket ব্যবহার করা:

Spring Framework WebSocket সমর্থন করে এবং Spring WebSocket এর মাধ্যমে আপনাকে সহজে রিয়েল-টাইম কমিউনিকেশন সেটআপ করতে সহায়তা করে। এখানে একটি Spring Boot WebSocket উদাহরণ দেখানো হলো।


Step 1: Maven Dependencies

Spring Boot অ্যাপ্লিকেশন জন্য WebSocket ডিপেনডেন্সি যোগ করুন।

<dependencies>
    <!-- Spring Boot Starter Web for basic WebSocket functionality -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-websocket</artifactId>
    </dependency>

    <!-- Spring Boot Starter Web for MVC functionality -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!-- Spring Boot Starter Thymeleaf for rendering views -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
</dependencies>
  • spring-boot-starter-websocket: WebSocket কার্যকারিতা যোগ করার জন্য।
  • spring-boot-starter-web: ওয়েব অ্যাপ্লিকেশন তৈরির জন্য মৌলিক স্টার্টার।

Step 2: WebSocket Configuration Class

Spring WebSocket কনফিগার করতে একটি কনফিগারেশন ক্লাস তৈরি করুন।

WebSocketConfig.java:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(myWebSocketHandler(), "/chat")
                .setAllowedOrigins("*");  // Allow all origins for this handler
    }

    public WebSocketHandler myWebSocketHandler() {
        return new MyWebSocketHandler();
    }
}
  • @EnableWebSocket: Spring MVC WebSocket কার্যকারিতা সক্ষম করতে ব্যবহৃত হয়।
  • WebSocketHandlerRegistry: WebSocket হ্যান্ডলার রেজিস্টার করতে ব্যবহৃত হয়।
  • myWebSocketHandler(): কাস্টম WebSocket হ্যান্ডলার ক্লাস তৈরি করা।

Step 3: WebSocket Handler Implementation

WebSocket হ্যান্ডলার হ'ল সেই অংশ যা WebSocket কানেকশন পরিচালনা করে এবং বার্তা প্রেরণ এবং গ্রহণ করে।

MyWebSocketHandler.java:

import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.CloseStatus;
import java.io.IOException;

public class MyWebSocketHandler implements WebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        // Connection established with client
        System.out.println("Connected to client: " + session.getId());
    }

    @Override
    public void handleMessage(WebSocketSession session, org.springframework.web.socket.WebSocketMessage<?> message) throws Exception {
        // Handle incoming messages
        System.out.println("Received message: " + message.getPayload());

        // Send a message back to the client
        session.sendMessage(new TextMessage("Hello Client, you said: " + message.getPayload()));
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.out.println("Error occurred: " + exception.getMessage());
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
        // Cleanup after connection closed
        System.out.println("Connection closed: " + session.getId());
    }

    @Override
    public boolean supportsPartialMessages() {
        return false;
    }
}
  • afterConnectionEstablished: ক্লায়েন্টের সাথে কানেকশন স্থাপন হলে এটি কল করা হয়।
  • handleMessage: ক্লায়েন্ট থেকে মেসেজ গ্রহণ এবং তা প্রসেস করা।
  • handleTransportError: ট্রান্সপোর্টের ত্রুটি হ্যান্ডলিং।
  • afterConnectionClosed: ক্লায়েন্টের সাথে কানেকশন বন্ধ হলে এটি কল করা হয়।

Step 4: Client-side WebSocket Code (HTML + JavaScript)

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

chat.html:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</title>
</head>
<body>
    <h2>WebSocket Chat</h2>
    <input type="text" id="message" />
    <button onclick="sendMessage()">Send Message</button>

    <p id="response"></p>

    <script>
        var socket = new WebSocket("ws://localhost:8080/chat");

        socket.onopen = function(event) {
            console.log("Connected to WebSocket server");
        };

        socket.onmessage = function(event) {
            document.getElementById("response").innerText = event.data;
        };

        function sendMessage() {
            var message = document.getElementById("message").value;
            socket.send(message);
        }
    </script>
</body>
</html>
  • new WebSocket("ws://localhost:8080/chat"): ওয়েবসকেট কানেকশন স্থাপন করা।
  • socket.onmessage: সার্ভার থেকে আসা মেসেজ শো করা।

Step 5: Run the Application

  1. Spring Boot অ্যাপ্লিকেশন চালু করুন: mvn spring-boot:run অথবা আপনার IDE থেকে WebSocketConfig এবং MyWebSocketHandler ক্লাস চালিয়ে অ্যাপ্লিকেশনটি রান করুন।
  2. ব্রাউজারে WebSocket Chat পেজে যান: http://localhost:8080/chat

Conclusion

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

Content added By

Spring MVC তে WebSocket কনফিগারেশন

92
92

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

Spring MVC তে WebSocket ব্যবহার করতে Spring WebSocket এবং STOMP প্রোটোকল ব্যবহার করা হয়, যা মেসেজিং লেভেলে সহায়ক হয়। WebSocket সংযোগ ব্যবস্থাপনার জন্য Spring Messaging এবং Spring WebSocket লাইব্রেরি ব্যবহৃত হয়। Spring Boot প্রকল্পে WebSocket কনফিগারেশন আরও সহজ হয়ে যায়, তবে সাধারণ Spring MVC প্রকল্পেও কনফিগারেশন করা যায়।


Spring MVC তে WebSocket কনফিগারেশন: ধাপ

Step 1: ডিপেনডেন্সি যোগ করা

Spring WebSocket এবং Spring Messaging এর জন্য নিম্নলিখিত ডিপেনডেন্সিগুলি pom.xml ফাইলে যোগ করতে হবে।

Maven Dependency:

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

<dependency>
    <groupId>org.springframework.messaging</groupId>
    <artifactId>spring-messaging</artifactId>
</dependency>

Step 2: WebSocket Configuration

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

WebSocketConfig.java:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(new MyWebSocketHandler(), "/ws")
                .addInterceptors(new HttpSessionHandshakeInterceptor())  // Optional, for session handling
                .setAllowedOrigins("*"); // Allow all origins, or restrict to specific ones
    }
}

Explanation:

  • @EnableWebSocket: Spring WebSocket সক্রিয় করার জন্য এই অ্যানোটেশন ব্যবহার করা হয়।
  • WebSocketConfigurer: WebSocket হ্যান্ডলার রেজিস্টার করার জন্য WebSocketConfigurer ইন্টারফেস ইমপ্লিমেন্ট করতে হয়।
  • /ws: এই URL পাথের মাধ্যমে WebSocket কানেকশন সম্পন্ন হবে।
  • setAllowedOrigins("*"): এই কনফিগারেশনটি সমস্ত উৎস থেকে কানেকশন অনুমতি দেয়। আপনি নির্দিষ্ট URL এর জন্য কানেকশন সীমিত করতে পারেন।

Step 3: WebSocket Handler তৈরি করা

WebSocketHandler কনফিগার করা হয় যে কোন WebSocket ক্লায়েন্টের সাথে সার্ভারের যোগাযোগ কীভাবে হবে।

MyWebSocketHandler.java:

import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        // Handle incoming message and send a response
        String responseMessage = "Hello from server: " + message.getPayload();
        session.sendMessage(new TextMessage(responseMessage));  // Send response back to client
    }
}

Explanation:

  • TextWebSocketHandler: TextWebSocketHandler ইমপ্লিমেন্ট করে আপনি WebSocket সংযোগের মাধ্যমে প্রাপ্ত টেক্সট মেসেজগুলির প্রক্রিয়া করতে পারেন।
  • handleTextMessage: এই মেথডে আপনি ক্লায়েন্ট থেকে প্রাপ্ত টেক্সট মেসেজ এবং সার্ভারের রেসপন্স মেসেজ পরিচালনা করবেন।
  • session.sendMessage(): এখানে সার্ভার ক্লায়েন্টে একটি রেসপন্স পাঠাচ্ছে।

Step 4: JavaScript Client Setup

Client-Side WebSocket ব্যবহার করতে JavaScript এ WebSocket API ব্যবহার করা হয়। নিচে একটি উদাহরণ দেওয়া হয়েছে যেখানে WebSocket ক্লায়েন্ট সার্ভারের সাথে কানেক্ট হয়ে মেসেজ পাঠাবে এবং সার্ভার থেকে মেসেজ গ্রহণ করবে।

client.html:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Test</title>
</head>
<body>
    <h2>WebSocket Test</h2>
    <button onclick="sendMessage()">Send Message</button>
    <div id="response"></div>

    <script>
        var socket = new WebSocket("ws://localhost:8080/ws");  // WebSocket URL

        socket.onopen = function() {
            console.log("Connected to WebSocket server.");
        };

        socket.onmessage = function(event) {
            document.getElementById("response").innerText = "Server says: " + event.data;
        };

        socket.onclose = function() {
            console.log("Disconnected from WebSocket server.");
        };

        function sendMessage() {
            socket.send("Hello from client!");  // Send message to server
        }
    </script>
</body>
</html>

Explanation:

  • new WebSocket("ws://localhost:8080/ws"): এখানে WebSocket URL তৈরি করা হয়েছে, যেখানে ws://localhost:8080/ws এর মাধ্যমে WebSocket সার্ভারের সাথে কানেকশন করা হবে।
  • onopen: WebSocket কানেকশন সফল হলে এই ইভেন্ট ফায়ার হবে।
  • onmessage: সার্ভার থেকে মেসেজ আসলে এই ইভেন্ট ফায়ার হবে এবং মেসেজটি <div> এর মধ্যে দেখানো হবে।
  • sendMessage(): ক্লায়েন্ট থেকে সার্ভারে মেসেজ পাঠানোর জন্য এটি ব্যবহৃত হয়।

Step 5: Spring Boot Application Class

Spring Boot অ্যাপ্লিকেশনের মূল ক্লাস তৈরি করুন যাতে Spring Boot অ্যাপ্লিকেশন চালু করা যায়।

WebSocketApplication.java:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebSocketApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebSocketApplication.class, args);
    }
}

Step 6: Testing the WebSocket Connection

  1. Run the Application: আপনার Spring Boot অ্যাপ্লিকেশন চালু করুন।
  2. Open the Client: client.html ফাইলটি একটি ব্রাউজারে খুলুন।
  3. Send and Receive Messages: "Send Message" বাটনে ক্লিক করলে, ক্লায়েন্ট সার্ভারে মেসেজ পাঠাবে এবং সার্ভার থেকে একটি রেসপন্স পাবে।

উপসংহার:

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

Content added By

STOMP প্রটোকল এবং SockJS এর মাধ্যমে Real-time Communication

60
60

STOMP (Streaming Text Oriented Messaging Protocol) এবং SockJS হল দুটি প্রযুক্তি যা Spring MVC তে Real-time Communication বা WebSocket-based communication বাস্তবায়নের জন্য ব্যবহৃত হয়। এই প্রযুক্তিগুলি সাধারণত WebSocket এর সাথে ব্যবহৃত হয় যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করার জন্য একটি পূর্ণ-দ্বিদিশী সংযোগ স্থাপন করে।

STOMP প্রটোকল:

STOMP হল একটি সহজ এবং টেক্সট ভিত্তিক প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজ আদান-প্রদান করতে ব্যবহৃত হয়। এটি WebSocket প্রোটোকলের উপর তৈরি করা হয় এবং সাধারণত message-oriented middleware এর জন্য ব্যবহৃত হয়। STOMP প্রটোকলটি মেসেজকে নির্দিষ্ট topics বা queues এর মাধ্যমে পাঠায় এবং গ্রাহকরা সেই মেসেজ গ্রহণ করতে পারে। এটি pub/sub (publish/subscribe) মডেল সমর্থন করে।

STOMP প্রোটোকল ক্লায়েন্ট এবং সার্ভারের মধ্যে ইভেন্ট-ভিত্তিক যোগাযোগ সহজতর করতে সাহায্য করে। Spring এর মাধ্যমে STOMP ব্যবহার করে আপনি মেসেজ কনজিউমার এবং প্রডিউসার তৈরি করতে পারেন এবং অ্যাপ্লিকেশনের মধ্যে ইভেন্ট চালাতে পারেন।


SockJS:

SockJS একটি ব্রাউজার লাইব্রেরি যা WebSocket সমর্থন না থাকা ব্রাউজারগুলির জন্য ফ্যালব্যাক সমাধান প্রদান করে। SockJS WebSocket-এর উপর ভিত্তি করে কাজ করে এবং যদি ব্রাউজার WebSocket সমর্থন না করে, তবে এটি অন্যান্য প্রোটোকল ব্যবহার করে (যেমন, XHR polling, long-polling, iframe-based transports)। এটি WebSocket-like আচরণ প্রদান করে এবং real-time communication-এ সক্ষম করে।

SockJS এবং STOMP মিলে এমন একটি সমাধান তৈরি করে যা বাস্তবসম্মত এবং সমর্থনযোগ্য হয় এবং বিভিন্ন ব্রাউজারে কাজ করে।


Spring MVC তে STOMP প্রটোকল এবং SockJS ব্যবহার করার উদাহরণ:

Spring MVC তে STOMP এবং SockJS ব্যবহার করে WebSocket ভিত্তিক রিয়েল-টাইম কমিউনিকেশন সেটআপ করতে, নিচে কিছু পদক্ষেপ অনুসরণ করতে হবে:

1. Spring WebSocket এবং STOMP Dependency যোগ করা:

প্রথমে, spring-boot-starter-websocket এবং spring-boot-starter-messaging dependencies আপনার pom.xml ফাইলে যুক্ত করতে হবে।

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

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

2. WebSocket Configuration:

এখন WebSocket এবং STOMP কনফিগার করতে হবে যাতে Spring WebSocket স্টার্ট করতে পারে।

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();  // SockJS এর মাধ্যমে /ws এন্ডপয়েন্ট খুলে দেব
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic"); // /topic এর মাধ্যমে মেসেজ ব্রোকার সক্রিয় করা হচ্ছে
        registry.setApplicationDestinationPrefixes("/app"); // /app দিয়ে মেসেজ রুট করা হচ্ছে
    }
}
  • @EnableWebSocketMessageBroker: এটি WebSocket মেসেজ ব্রোকার সক্রিয় করে।
  • registerStompEndpoints: এটি STOMP এন্ডপয়েন্ট /ws তৈরি করে, যা ক্লায়েন্টের কাছে উপলব্ধ হবে। withSockJS() ব্যবহার করে SockJS সক্রিয় করা হয়েছে।
  • configureMessageBroker: এটি স্টাম্পের মেসেজ ব্রোকার কনফিগার করে, যেখানে /topic একটি পাবলিশড টপিক এবং /app একটি রুট।

3. Controller - STOMP Messaging:

স্টাম্প মেসেজ প্রেরণ ও গ্রহণ করার জন্য একটি কন্ট্রোলার তৈরি করা হবে।

@Controller
public class ChatController {

    @MessageMapping("/chat")  // "/app/chat" থেকে পাঠানো মেসেজ হ্যান্ডল করবে
    @SendTo("/topic/messages")  // "/topic/messages" এ মেসেজ প্রেরণ করবে
    public String sendMessage(String message) {
        return message;  // মেসেজ ফিরিয়ে দিব
    }
}
  • @MessageMapping: এটি STOMP মেসেজ ম্যানেজারের জন্য ব্যবহৃত হয়, যেখানে /app/chat এর মাধ্যমে মেসেজ গ্রহণ করা হবে।
  • @SendTo: এটি /topic/messages টপিকে মেসেজ পাঠাবে।

4. Client-Side (JavaScript) - STOMP and SockJS:

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

<!DOCTYPE html>
<html>
<head>
    <title>Spring WebSocket Chat</title>
    <script src="https://cdn.jsdelivr.net/npm/sockjs-client@1.5.0/dist/sockjs.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/stomp.js/2.3.3/stomp.min.js"></script>
</head>
<body>
    <h2>WebSocket Chat</h2>
    <div id="messages"></div>
    <input type="text" id="messageInput" placeholder="Enter message"/>
    <button onclick="sendMessage()">Send</button>

    <script>
        var socket = new SockJS('/ws');  // SockJS স্টার্ট
        var stompClient = Stomp.over(socket);

        stompClient.connect({}, function (frame) {
            console.log('Connected: ' + frame);
            stompClient.subscribe('/topic/messages', function (messageOutput) {
                var message = messageOutput.body;
                document.getElementById("messages").innerHTML += "<p>" + message + "</p>";
            });
        });

        function sendMessage() {
            var message = document.getElementById("messageInput").value;
            stompClient.send("/app/chat", {}, message);  // মেসেজ প্রেরণ
        }
    </script>
</body>
</html>
  • SockJS ব্যবহার করে /ws এ স্টার্ট করা হয়েছে, এবং STOMP ক্লায়েন্টের মাধ্যমে মেসেজ পাঠানো হচ্ছে।
  • stompClient.send("/app/chat", {}, message);: এই লাইনটি স্টাম্প সার্ভারে /app/chat এর মাধ্যমে মেসেজ পাঠাবে।

5. Run the Application:

এখন, Spring Boot অ্যাপ্লিকেশনটি চালু করুন এবং ক্লায়েন্ট পেজে প্রবেশ করুন। আপনি "Send" বাটনে ক্লিক করলে, মেসেজটি সার্ভারে প্রক্রিয়া হবে এবং অন্যান্য ক্লায়েন্টদের কাছে /topic/messages এর মাধ্যমে পাঠানো হবে।


Conclusion:

STOMP এবং SockJS ব্যবহার করে Spring MVC তে Real-time Communication প্রতিষ্ঠিত করা সম্ভব। STOMP WebSocket প্রটোকলের উপর ভিত্তি করে মেসেজ পাঠানো ও গ্রহণের জন্য ব্যবহৃত হয় এবং SockJS WebSocket না থাকা ব্রাউজারে ফ্যালব্যাক প্রযুক্তি হিসেবে কাজ করে। Spring Framework এর সাথে এই প্রযুক্তিগুলি একত্রিত করে আপনি একটি রিয়েল-টাইম, স্কেলেবল এবং ফ্লেক্সিবল অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By

উদাহরণ সহ WebSocket Integration

97
97

WebSocket হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দুটি-পথের যোগাযোগ (two-way communication) তৈরি করে, যা HTTP প্রোটোকলের মাধ্যমে সাধারণত সম্ভব নয়। এটি ডেটা দ্রুত এবং অ্যাসিঙ্ক্রোনাসভাবে পাঠাতে ব্যবহৃত হয়। Spring MVC তে WebSocket ইন্টিগ্রেশন ক্লায়েন্ট এবং সার্ভারের মধ্যে রিয়েল-টাইম ডেটা আদান-প্রদান করতে ব্যবহৃত হয়। Spring WebSocket ইন্টিগ্রেশন Spring 4.0 থেকে পাওয়া যায় এবং এটি Spring Framework-এ অন্তর্ভুক্ত।

Spring MVC তে WebSocket ব্যবহারের জন্য Spring WebSocket এবং STOMP (Simple Text Oriented Messaging Protocol) ব্যবহার করা হয়। STOMP ক্লায়েন্ট এবং সার্ভারের মধ্যে মেসেজ আদান-প্রদান করতে ব্যবহৃত হয়।

WebSocket Integration Steps:

  1. Spring WebSocket Dependency
  2. WebSocket Configuration
  3. Controller Setup
  4. Client-Side WebSocket Setup
  5. Test the WebSocket Communication

Step 1: Add Spring WebSocket Dependency (Maven)

Spring WebSocket এবং STOMP ব্যবহারের জন্য আপনাকে spring-boot-starter-websocket ডিপেন্ডেন্সি ব্যবহার করতে হবে।

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

Step 2: WebSocket Configuration

Spring MVC তে WebSocket কনফিগার করতে WebSocketConfigurer ইন্টারফেস এবং StompEndpointRegistry ব্যবহার করা হয়।

WebSocketConfig.java (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.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

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

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        // Enable a simple in-memory message broker
        config.enableSimpleBroker("/topic");  // "/topic" is the destination for subscribers
        config.setApplicationDestinationPrefixes("/app");  // "/app" is the prefix for messages sent from the client
    }
}
  • @EnableWebSocketMessageBroker: এই অ্যানোটেশন Spring WebSocket এবং STOMP ব্যবহারের অনুমতি দেয়।
  • registerStompEndpoints: এটি ক্লায়েন্টদের জন্য "/chat" URL দিয়ে WebSocket কনেকশন তৈরি করতে সাহায্য করে।
  • configureMessageBroker: এটি স্টাম্প ব্রোকার কনফিগার করে, যেখানে /topic সাবস্ক্রাইব করার জন্য ব্যবহৃত হয় এবং /app প্রিফিক্স দিয়ে সার্ভারের কাছে মেসেজ পাঠানো হয়।

Step 3: Controller Setup

কন্ট্রোলারে @MessageMapping এবং @SendTo অ্যানোটেশন ব্যবহার করা হয়। @MessageMapping ক্লায়েন্ট থেকে আসা মেসেজ ম্যানেজ করে এবং @SendTo ক্লায়েন্টে রেসপন্স পাঠানোর জন্য ব্যবহৃত হয়।

ChatController.java (Controller for WebSocket Communication)

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

@Controller
public class ChatController {

    private final SimpMessagingTemplate messagingTemplate;

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

    // Handle incoming messages from client
    @MessageMapping("/send")
    public void sendMessage(ChatMessage message) {
        // Broadcast the message to all subscribers of "/topic/messages"
        messagingTemplate.convertAndSend("/topic/messages", message);
    }
}
  • @MessageMapping("/send"): এটি ক্লায়েন্ট থেকে /app/send এ আসা মেসেজ হ্যান্ডল করে।
  • SimpMessagingTemplate: এটি WebSocket মেসেজ পাঠানোর জন্য ব্যবহৃত হয়। convertAndSend("/topic/messages", message) মাধ্যমে /topic/messages সাবস্ক্রাইবারদের কাছে মেসেজ পাঠানো হয়।

ChatMessage.java (Model Class for ChatMessage)

public class ChatMessage {

    private String sender;
    private String content;

    // Getters and Setters
}

Step 4: Client-Side WebSocket Setup

ক্লায়েন্ট সাইডে SockJS এবং STOMP.js লাইব্রেরি ব্যবহার করা হয়। এই লাইব্রেরিগুলি WebSocket যোগাযোগ সহজতর করে এবং ক্লায়েন্টকে মেসেজ পাঠাতে এবং গ্রহণ করতে সহায়ক হয়।

index.html (Client-Side WebSocket Communication)

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Chat</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>
    <script>
        var stompClient = null;

        function connect() {
            var socket = new SockJS('/chat');  // Connect to the WebSocket endpoint
            stompClient = Stomp.over(socket);

            stompClient.connect({}, function (frame) {
                console.log('Connected: ' + frame);
                stompClient.subscribe('/topic/messages', function (messageOutput) {
                    showMessage(JSON.parse(messageOutput.body).content);
                });
            });
        }

        function sendMessage() {
            var message = document.getElementById('message').value;
            stompClient.send("/app/send", {}, JSON.stringify({'sender': 'User', 'content': message}));
        }

        function showMessage(message) {
            var messageArea = document.getElementById("messages");
            messageArea.value = messageArea.value + "\n" + message;
        }

        window.onload = connect;
    </script>
</head>
<body>
    <h2>WebSocket Chat</h2>
    <textarea id="messages" rows="10" cols="50" readonly></textarea><br/>
    <input type="text" id="message" placeholder="Enter message" />
    <button onclick="sendMessage()">Send</button>
</body>
</html>
  • SockJS এবং STOMP.js লাইব্রেরিগুলি ব্যবহার করে WebSocket কানেকশন তৈরি করা হয়েছে।
  • connect(): WebSocket সার্ভারে কানেক্ট করার জন্য কল করা হয়।
  • sendMessage(): ক্লায়েন্ট থেকে মেসেজ পাঠানোর জন্য ব্যবহার করা হয়, যা /app/send এ পাঠানো হয়।
  • subscribe(): ক্লায়েন্টকে /topic/messages সাবস্ক্রাইব করতে সহায়ক, যাতে সার্ভার থেকে মেসেজ রিসিভ করা যায়।

Step 5: Test the WebSocket Communication

  1. অ্যাপ্লিকেশন চালু করুন এবং index.html ফাইলটি ব্রাউজারে ওপেন করুন।
  2. একটি মেসেজ টাইপ করুন এবং "Send" বাটনে ক্লিক করুন। এটি WebSocket মাধ্যমে সার্ভারে পাঠানো হবে।
  3. সার্ভার থেকে মেসেজ সমস্ত ক্লায়েন্টদের কাছে পৌঁছে যাবে, যারা /topic/messages সাবস্ক্রাইব করেছে।

Conclusion

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

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion