WebSocket হলো একটি প্রোটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে একক, দীর্ঘস্থায়ী সংযোগ স্থাপন করতে ব্যবহৃত হয়, যার মাধ্যমে উভয়ের মধ্যে দ্রুত এবং রিয়েল-টাইম ডেটা আদান-প্রদান করা সম্ভব। Ruby on Rails-এ WebSocket এর সাহায্যে আপনি লাইভ আপডেট এবং নোটিফিকেশন সিস্টেম তৈরি করতে পারেন, যেখানে ক্লায়েন্টদের নতুন তথ্য বা ইভেন্ট সম্পর্কে রিয়েল-টাইমে জানানো হয়।
Rails-এ WebSocket প্রযুক্তি কার্যকরভাবে ব্যবহার করার জন্য জনপ্রিয় দুটি পদ্ধতি রয়েছে:
- Action Cable
- JavaScript/WebSocket API
Rails 5 থেকে Action Cable নামের একটি বিল্ট-ইন ফিচার অন্তর্ভুক্ত করা হয়েছে যা WebSocket সাপোর্ট দেয়। এটি আপনাকে সহজে রিয়েল-টাইম ফিচার (যেমন চ্যাট, লাইভ আপডেট, নোটিফিকেশন) তৈরি করতে সাহায্য করে।
Action Cable কী?
Action Cable হল Ruby on Rails এর একটি ফিচার যা WebSocket প্রটোকল ব্যবহার করে রিয়েল-টাইম কমিউনিকেশন সাপোর্ট করে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে একযোগে ডেটা পাঠানোর মাধ্যমে লাইভ আপডেট এবং নোটিফিকেশন সিস্টেম তৈরি করতে সাহায্য করে।
এটি মূলত দুইটি গুরুত্বপূর্ণ অংশে বিভক্ত:
- Channel: সার্ভারের একটি চ্যানেল, যা ক্লায়েন্টের সাথে রিয়েল-টাইম ডেটা আদান-প্রদান করে।
- Subscription: ক্লায়েন্ট সাইডে WebSocket কানেকশনের মাধ্যমে সার্ভারের চ্যানেলে সাবস্ক্রাইব করার প্রক্রিয়া।
Action Cable সেটআপ এবং কনফিগারেশন
১. Action Cable ইনস্টলেশন
Action Cable ব্যবহার করতে হলে প্রথমে আপনার Rails অ্যাপ্লিকেশনটি Rails 5 বা তার পরের ভার্সনে থাকতে হবে। সাধারণত, এটি Rails-এ ডিফল্টভাবে অন্তর্ভুক্ত থাকে, তবে আপনাকে এটিকে কনফিগার করার জন্য কিছু সেটিংস প্রয়োজন।
আপনি যদি Redis ব্যবহার করতে চান, তাহলে Redis ইনস্টল করে সেটি কনফিগার করতে হবে, কারণ Action Cable Redis-কে ব্যবহৃত করে।
Redis ইনস্টল করতে:
brew install redis # MacOS এ
sudo apt-get install redis-server # Linux এ
এরপর, Rails অ্যাপ্লিকেশনে Redis কনফিগার করুন। Gemfile এ এই লাইনের মাধ্যমে Redis যোগ করুন:
gem 'redis', '~> 4.0'
এবং তারপর bundle install চালান।
২. Action Cable কনফিগারেশন
config/cable.yml ফাইলে Action Cable এর জন্য কনফিগারেশন সেট করুন:
development:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: your_app_development
production:
adapter: redis
url: redis://localhost:6379/1
channel_prefix: your_app_production
pool_size: 5
এখানে, url হল Redis এর কানেকশন স্ট্রিং, এবং channel_prefix হল চ্যানেলের নামের একটি প্রিফিক্স।
৩. Channel তৈরি করা
এবার আপনাকে একটি channel তৈরি করতে হবে, যা ক্লায়েন্টের সাথে যোগাযোগ করবে। এটি একটি Ruby ক্লাস হবে যা Action Cable এর মাধ্যমে ডেটা পাঠাতে এবং গ্রহণ করতে সক্ষম।
rails generate channel Notifications
এটি দুটি ফাইল তৈরি করবে:
app/channels/notifications_channel.rb(Channel ক্লাস)app/javascript/channels/notifications_channel.js(JavaScript ক্লায়েন্ট সাইড সাবস্ক্রিপশন)
app/channels/notifications_channel.rb ফাইলটি দেখতে কিছুটা এরকম হবে:
class NotificationsChannel < ApplicationCable::Channel
def subscribed
# যখন ক্লায়েন্ট চ্যানেলে সাবস্ক্রাইব করবে, তখন এটি চালু হবে
stream_from "notifications_#{current_user.id}"
end
def unsubscribed
# যখন ক্লায়েন্ট চ্যানেল থেকে আনসাবস্ক্রাইব করবে
end
end
এখানে, stream_from মেথড ব্যবহার করে আমরা একটি নির্দিষ্ট চ্যানেল থেকে ডেটা পাঠাচ্ছি, যা ব্যবহারকারীর আইডির উপর ভিত্তি করে নির্ধারিত।
৪. ক্লায়েন্ট সাইড সাবস্ক্রিপশন
JavaScript ফাইলটি (যেমন app/javascript/channels/notifications_channel.js) সঠিকভাবে কনফিগার করা প্রয়োজন:
import consumer from "./consumer"
consumer.subscriptions.create("NotificationsChannel", {
connected() {
console.log("Connected to Notifications Channel!");
},
disconnected() {
console.log("Disconnected from Notifications Channel!");
},
received(data) {
// এখানে ডেটা পেলে আপনি কিছু করতে পারবেন (যেমন, নোটিফিকেশন শো করা)
alert(data.message);
}
});
এখানে, connected মেথডটি চ্যানেলে সাবস্ক্রাইব করার পর কল হবে, এবং received মেথডে আপনি যখনই নতুন ডেটা পাবেন তখন সেটা পেতে পারবেন।
Action Cable ব্যবহার করে Live Updates পাঠানো
এখন, আপনাকে Action Cable এর মাধ্যমে live updates পাঠাতে হবে। সাধারণত, একটি নির্দিষ্ট অ্যাকশন বা ইভেন্টের জন্য সার্ভার থেকে ক্লায়েন্টকে আপডেট পাঠানো হয়।
ধরা যাক, আপনি যখন একটি নতুন পোস্ট তৈরি করবেন, তখন সকল লগ ইন ইউজারকে একটি নোটিফিকেশন পাঠাতে চান।
class PostsController < ApplicationController
def create
@post = Post.new(post_params)
if @post.save
# নতুন পোস্ট সেভ হলে সব ইউজারের জন্য লাইভ নোটিফিকেশন পাঠানো
ActionCable.server.broadcast "notifications_#{current_user.id}", message: "New post created!"
redirect_to @post
else
render :new
end
end
end
এখানে, ActionCable.server.broadcast মেথডটি ব্যবহারকারীর চ্যানেলে একটি নোটিফিকেশন পাঠাচ্ছে।
নোটিফিকেশন পাঠানোর সময় অ্যাসিঙ্ক্রোনাস কাজ
Action Cable ডিফল্টভাবে সিঙ্ক্রোনাস কাজ করে, কিন্তু কিছু সময় অ্যাসিঙ্ক্রোনাস কাজ করা প্রয়োজন। আপনি অ্যাসিঙ্ক্রোনাস কাজ করতে deliver_later ব্যবহার করতে পারেন।
class Post < ApplicationRecord
after_create_commit do
broadcast_to "notifications_#{user.id}", message: "A new post has been created!"
end
end
এখানে, broadcast_to মেথডটি অ্যাসিঙ্ক্রোনাসভাবে নোটিফিকেশন পাঠাবে।
সারমর্ম
Action Cable ব্যবহার করে Ruby on Rails-এ WebSocket এর মাধ্যমে রিয়েল-টাইম লাইভ আপডেট এবং নোটিফিকেশন সিস্টেম তৈরি করা সম্ভব। Action Cable চ্যানেল এবং সাবস্ক্রিপশন ব্যবস্থার মাধ্যমে সার্ভার এবং ক্লায়েন্টের মধ্যে একযোগে ডেটা আদান-প্রদান করা যায়। Redis ব্যবহার করে এটি ডেটা দ্রুত এবং দক্ষতার সাথে প্রেরণ করতে সক্ষম। Action Cable রিয়েল-টাইম চ্যাট, নোটিফিকেশন এবং লাইভ আপডেট ফিচার তৈরির জন্য একটি শক্তিশালী উপকরণ।
Read more