WebSocket হল একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডুপ্লেক্স (two-way) যোগাযোগ প্রতিষ্ঠা করতে সহায়তা করে। এটি HTTP প্রোটোকলের উপর ভিত্তি করে কাজ করে, তবে একবার সংযোগ স্থাপন হলে, এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে স্থায়ী সংযোগ ধরে রাখে, যার মাধ্যমে দ্রুত এবং রিয়েল-টাইম ডেটা প্রেরণ করা সম্ভব হয়।
Spring WebSocket ইন্টিগ্রেশন Spring Framework এর মাধ্যমে WebSocket প্রটোকলের ব্যবহারের জন্য একটি শক্তিশালী এবং সহজ উপায় প্রদান করে। Spring WebSocket ইন্টিগ্রেশন ব্যবহার করে আপনি অ্যাপ্লিকেশনগুলিতে রিয়েল-টাইম, ডুপ্লেক্স, এবং পুশ প্রযুক্তির সমর্থন তৈরি করতে পারেন, যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ স্টক মার্কেট, রিয়েল-টাইম নোটিফিকেশন ইত্যাদি।
এই টিউটোরিয়ালে আমরা Spring WebSocket Integration এর ব্যবহার এবং কনফিগারেশন দেখব।
Spring WebSocket Integration এর প্রধান উপাদানসমূহ
- WebSocketConfiguration: Spring WebSocket সাপোর্ট কনফিগার করতে একটি কনফিগারেশন ক্লাস তৈরি করা হয়।
- WebSocketHandler: এটি WebSocket মেসেজ হ্যান্ডলারের দায়িত্ব পালন করে, যা ক্লায়েন্ট থেকে আসা মেসেজ প্রক্রিয়া করে এবং রেসপন্স পাঠায়।
- 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
WebSocketAPI ব্যবহার করে সার্ভারের সাথে সংযোগ স্থাপন করা হয়েছে এবং ক্লায়েন্ট থেকে মেসেজ পাঠানো হয়েছে।
সারাংশ
Spring WebSocket Integration ব্যবহার করে আপনি Spring Framework-এ রিয়েল-টাইম, ডুপ্লেক্স যোগাযোগ সক্ষম করতে পারেন। Spring WebSocket এর মাধ্যমে, আপনি ক্লায়েন্ট এবং সার্ভারের মধ্যে একযোগে যোগাযোগ স্থাপন করতে পারেন এবং মেসেজ আদান-প্রদান করতে পারেন।
এই টিউটোরিয়ালে:
- WebSocketConfigurer ব্যবহার করে WebSocket কনফিগারেশন করা হয়েছে।
- WebSocketHandler ব্যবহার করে ক্লায়েন্টের মেসেজ হ্যান্ডল করা হয়েছে।
- WebSocketController ব্যবহার করে WebSocket মেসেজ ক্লায়েন্টের কাছে পাঠানো হয়েছে।
- JavaScript ক্লায়েন্টের মাধ্যমে WebSocket সার্ভারের সঙ্গে যোগাযোগ স্থাপন করা হয়েছে।
Spring WebSocket Integration আপনার অ্যাপ্লিকেশনে রিয়েল-টাইম যোগাযোগ এবং পুশ প্রযুক্তি ইন্টিগ্রেশন করতে সাহায্য করে, যেমন চ্যাট সিস্টেম, লাইভ ট্র্যাকিং ইত্যাদি।
Read more