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 এর সাথে এই প্রযুক্তিগুলি একত্রিত করে আপনি একটি রিয়েল-টাইম, স্কেলেবল এবং ফ্লেক্সিবল অ্যাপ্লিকেশন তৈরি করতে পারবেন।
Read more