রিয়েল-টাইম ফিচারগুলো ওয়েব অ্যাপ্লিকেশনে দিন দিন বেশি গুরুত্বপূর্ণ হচ্ছে, কিন্তু প্রতিটি Rails ডেভেলপার Action Cable-র সাথে পরিচিত নন, যা ফ্রেমওয়ার্কের বিল্ট-ইন WebSocket লাইব্রেরি।
Rails Action Cable দীর্ঘদিন ধরে WebSocket সাপোর্ট করে আসছে, কিন্তু এর সাথে কিছু অতিরিক্ত জটিলতা থাকে। Rails 8-এ Solid Cable পরিচয় করানো হয়েছে, একটি নতুন ডেটাবেস-ব্যাকড অ্যাডাপ্টার Action Cable-এর জন্য যা Redis-এর প্রয়োজনীয়তা দূর করে। এই গাইডে, আমি Solid Cable-এর মাধ্যমে Action Cable-র মাধ্যমে যাব এবং আপনাকে দেখাব কীভাবে একটি রিয়েল-টাইম ফিচার তৈরি করবেন। আপনি দেখবেন কীভাবে Redis-র ঝামেলা নিতে না হয়ে Rails 8 অ্যাপে রিয়েল-টাইম কার্যকারিতা যোগ করা সহজ।
আমি আপনাকে আমার সাথে অ্যাপটি তৈরি করতে অনুশংসা করি, কিন্তু আপনি GitHub-এ ফিনিশড প্রজেক্টটি দেখতে পারেন।
কেন Rails Action Cable ব্যবহার করবেন?
আধুনিক ওয়েব অ্যাপস প্রায়শই ক্লায়েন্টদের রিয়েল-টাইমে আপডেট পুশ করার প্রয়োজন পড়ে। স্পষ্ট উদাহরণ হলো চ্যাট মেসেজ ইনস্ট্যান্টে প্রদর্শন হওয়া বা লাইভ ড্যাশবোর্ড নোটিফিকেশন। Action Cable হলো Rails-এর বিল্ট-ইন সমাধান WebSocket আপনার অ্যাপে ইন্টিগ্রেট করার জন্য, যা সার্ভার এবং ক্লায়েন্টের মধ্যে দ্বিমুখী, স্থায়ী যোগাযোগ সক্ষম করে। আমি ব্যক্তিগতভাবে Action Cable-র জন্য কৃতজ্ঞ, কারণ এটি Rails ফ্রেমওয়ার্কের অংশ হিসেবে আপনাকে একটি আসল ব্যবহারিক ওয়েব অ্যাপের জন্য সব কিছু দেয়। Action Cable ব্যবহার মানে সার্ভার ব্রাউজারের কাছে ডেটা পাঠাতে পারে ব্রাউজারের স্পষ্ট অনুরোধ ছাড়া (কোনো ইউজার-প্রম্পটেড রিফ্রেশ নেই!)।
Action Cable এবং WebSocket-র মাধ্যমে, আপনার Rails অ্যাপ লাইভ ইন্টারেক্টিভ ফিচার দিতে পারে যা ঐতিহাসিকভাবে সার্ভার-রেন্ডার্ড অ্যাপে বাস্তবায়ন করা কঠিন ছিল। কিছু দৈনন্দিন ব্যবহারের ক্ষেত্রে:
- লাইভ চ্যাট অ্যাপ্লিকেশন
- নোটিফিকেশন এবং ফিড
- লাইভ আপডেট সহ কলাবোরেটিভ অ্যাপস
- লাইভ স্পোর্টস বা স্টক টিকার
সংক্ষেপে, Action Cable ট্রেডিশনাল রিকোয়েস্ট-রেসপন্স সাইকেল এবং রিয়েল-টাইম ইভেন্ট-ড্রাইভেন আপডেটের মাঝপথ পূরণ করে। ক্লায়েন্ট সাইডে, Rails একটি JavaScript কনজিউমার প্রদান করে চ্যানেল সাবস্ক্রাইব করতে এবং ব্রডকাস্ট গ্রহণ করতে। ডেভেলপার হিসেবে, আপনি ব্যাকএন্ড চ্যানেল ডিফাইন করে (কন্ট্রোলারের মত, কিন্তু রিয়েল-টাইম স্ট্রিমের জন্য) Action Cable-এর সাথে ইন্টারঅ্যাক্ট করেন যা ফ্রন্ট-এন্ড ক্লায়েন্টরা সাবস্ক্রাইব করতে পারে।
Solid Cable কী?
আপনি যদি আগের Rails সংস্করণে Action Cable ব্যবহার করে থাকেন, তবে আপনি জানতে পারেন যে প্রোডাকশনে এটি সাধারণত Redis-র (বা PostgreSQL-এর NOTIFY) উপর নির্ভর করে ভিন্ন সার্ভার প্রসেস জুড়ে মেসেজ ব্রডকাস্ট করার জন্য। পাব/সাব সার্ভিস (প্রায়শই Redis) নিশ্চিত করে যে একটি Rails প্রসেস থেকে মেসেজ অন্যান্য সব প্রসেসে পৌঁছাচ্ছে যাতে সেগুলো তাদের কানেক্টেড WebSocket ক্লায়েন্টদের ফরওয়ার্ড করতে পারে। এই অতিরিক্ত ইনফ্রাস্ট্রাকচার Action Cable ব্যবহার করার জন্য ইতিবাচকভাবে একটি প্রয়োজনীয়তা ছিল।
Rails 8-এ পরিচয় করা Solid Cable, আপনার বিদ্যমান ডেটাবেসকে ব্যাকএন্ড হিসেবে ব্যবহার করে Redis-এর মত এক্সটার্নাল পাব/সাব সার্ভিসের প্রয়োজনীয়তা প্রতিস্থাপন করে। Solid Cable Action Cable-এর জন্য একটি ডেটাবেস-ব্যাকড অ্যাডাপ্টার, ঠিক যেমন Solid Queue Active Job-এর জন্য এবং Solid Cache Active Cache-এর জন্য। প্রতিটি ইনকামিং WebSocket মেসেজ একটি ডেটাবেস টেবিলে লেখা হয়, এবং সব Action Cable ইনস্ট্যান্স নতুন মেসেজের জন্য সেই টেবিলকে পোল করে ক্লায়েন্টদের ব্রডকাস্ট করে। এটি খুব দ্রুত হয় (ডিফল্টভাবে প্রতি ১০০ মিলিসেকেন্ডে), যা লাগভাগ রিয়েল-টাইম পারফরম্যান্স দেয়। মেসেজগুলো শুধু সংক্ষিপ্ত সময় (ডিফল্ট ২৪ ঘন্টা) সংরক্ষিত থাকে তারপর প্রুন করা হয়, যাতে আপনি ডাটাবেস স্পেস নিয়ে চিন্তা না করেই gầnägত সমস্যাগুলো ডিবাগ করতে পারেন।
সামগ্রিকভাবে, Solid Cable Rails 8-এর "Solid Trifecta" ফিলোসফিতে ফিট করে, যা ক্যাশিং, ব্যাকগ্রাউন্ড জব, এবং রিয়েল-টাইম মেসেজিং-এর জন্য একটি সম্পূর্ণ বিল্ট-ইন, ডেটাবেস-ব্যাকড ফিচার সেট। Solid Cable-এর সাথে, আপনার কাছে জব, ক্যাশিং, এবং WebSocket সব ডেটাবেসের মাধ্যমে চালানোর শেষ টুকরো আছে।
Solid Cable-র সাথে Rails 8 অ্যাপ তৈরি করা
আপনি সম্ভবত Solid Cable-র সাথে হ্যান্ডস-অন হতে কৌতূহলী, তাই চলুন এটিকে একটি Rails 8 অ্যাপ্লিকেশনে যোগ করে একটি মিনিমাল চ্যাট রুম তৈরি করি যেখানে একাধিক ইউজার রিয়েল-টাইমে মেসেজ এক্সচেঞ্জ করতে পারবে।
এক্সাম্পল অ্যাপ তৈরি করা
আপনি Solid Cable-কে ব্যাকএন্ড হিসেবে ব্যবহার করে Action Cable-এর ফান্ডামেন্টাল (চ্যানেল, সাবস্ক্রিপশন, ব্রডকাস্টিং) শিখবেন। আমরা এই উদাহরণের জন্য Rails 8 ব্যবহার করব, তাই একটি নতুন Rails অ্যাপ তৈরি করুন:
rails _8.1.0_ new solid_cable_chat --database=sqlite3
তারপর নতুন solid_cable_chat ডিরেক্টরিতে cd করুন।
যেহেতু আপনি Rails 8 ব্যবহার করছেন, Solid Cable বা অন্য কোনো জেম যোগ করার প্রয়োজন নেই। অধিকাংশ বা সমস্ত কনফিগারেশন আপনার জন্য ইতিমধ্যে থাকবে। আমি সবকিছু চলে যাব যদি আপনি পুরনো Rails সংস্করণ থেকে আসেন।
Solid Cable কনফিগার করা
আমরা Solid Cable সেটআপ চালাতে শুরু করব:
bin/rails solid_cable:install
এই জেনারেটর দুটি মূল কাজ করে। এটি একটি config/cable.yml কনফিগারেশন ফাইল তৈরি করে যা Solid Cable কে কেবল অ্যাডাপ্টার হিসেবে সেট করে। এটি একটি db/cable_schema.rb ফাইলও তৈরি করে, যেটিতে Solid Cable-এর মেসেজ টেবিলের ডেটাবেস স্কিমা ডেফিনিশন থাকে। সাম্প্রতিক Rails ভার্সনগুলো rails new চালালেও এই ফাইলগুলো স্বয়ংক্রিয়ভাবে তৈরি করে।
এখন আমাদের Solid Cable-এর জন্য ডেটাবেস সেটিংস কনফিগার করতে হবে। ডিফল্টভাবে, Rails Solid Cable-এর জন্য আলাদা একটি ডেটাবেস ব্যবহার করে রিয়েল-টাইম মেসেজিং ডেটাকে আপনার বাকি ডেটা থেকে আলাদা রাখতে। ডেভেলপমেন্টে, আপনি একই ডেটাবেস ব্যবহার করতে পারেন বা আলাদা একটি সেট আপ করতে পারেন। আমি আপনাকে দেখাব কীভাবে ডেভেলপমেন্টে Solid Cable-এর জন্য আলাদা একটি SQLite ডেটাবেস ব্যবহার করবেন। এর মানে একটি নতুন "cable" ডেটাবেস কানেকশন যোগ করা।
Solid Cable-এর জন্য আপনার ডেটাবেস সেট আপ করা
config/database.yml ফাইলটি খুলুন। development সেকশনে একটি cable ডেটাবেস যোগ করুন। উদাহরণস্বরূপ, আপনি যদি SQLite ব্যবহার করেন (Rails-র ডেভেলপমেন্টের জন্য ডিফল্ট):
development:
primary: <<: *default
database: storage/development.sqlite3
cable:
<<: *default
database: storage/development_cable.sqlite3
migrations_paths: db/cable_migrate
production:
primary: <<: *default
database: storage/production.sqlite3
cache:
<<: *default
database: storage/production_cache.sqlite3
migrations_paths: db/cache_migrate
queue:
<<: *default
database: storage/production_queue.sqlite3
migrations_paths: db/queue_migrate
cable:
<<: *default
database: storage/production_cable.sqlite3
migrations_paths: db/cable_migrate
আবার, আপনি যদি যথেষ্ট সাম্প্রতিক Rails ভার্সনে থাকেন, তবে এই কনফিগারেশন ইতিমধ্যে থাকবে।
এখন config/cable.yml খুলুন। Solid Cable ইতিমধ্যে প্রোডাকশনে ডিফল্ট অ্যাডাপ্টার হওয়া উচিত। আমরা ডেভেলপমেন্টেও Solid Cable সক্রিয় করতে চাই (তाकি লোকালহোস্টে আমাদের চ্যাট টেস্ট করতে পারি)। cable.yml-কে এডিট করে solid_cable অ্যাডাপ্টার ব্যবহার করুন ডেভেলপমেন্টে এবং আমরা এখনই কনফিগার করা cable ডেটাবেসে পয়েন্ট করুন:
development:
adapter: solid_cable
connects_to:
database:
writing: cable
polling_interval: 0.1.seconds
message_retention: 1.day
test:
adapter: test
production:
adapter: solid_cable
connects_to:
database:
writing: cable
polling_interval: 0.1.seconds
message_retention: 1.day
উপরের cable.yml-এ, আমরা ডেভেলপমেন্ট অ্যাডাপ্টারকে solid_cable সেট করেছি এবং প্রোডাকশন সেটিং থেকে কপি করেছি। connects_to সেটিং Action Cable-কে বলে যে database.yml-এ ডিফাইন করা cable ডেটাবেসটি মেসেজ স্টোর করতে ব্যবহার করবে। আপনাকে সাম্প্রতিক Rails ভার্সনে থাকলেও এই পরিবর্তনটি করতে হবে।
ছোট অ্যাপের জন্য, আপনি Solid Cable-এর টেবিল ধারণ করার জন্য একই প্রাইমারি ডেটাবেস ব্যবহার করতে পারেন (স্কিমা মাইগ্রেশনে কপি করে আলাদা DB কনফিগারেশন সরিয়ে দিয়ে)। কিন্তু পারফরম্যান্স ইন্টারফিয়ারেন্স এড়াতে আপনার প্রাইমারি অ্যাপ ডেটা থেকে আলাদা ডেটাবেস ব্যবহার করা রিকমেন্ড করা হয়।
শেষে, rails db:prepare চালান ডেটাবেস রেডি আছে কিনা নিশ্চিত করতে। প্রোডাকশনে ডিপ্লয় করলে আপনাকে এটি করতে হবে।
Action Cable চ্যানেল সেট আপ করা
Action Cable চ্যানেলের মাধ্যমে কাজ করে, যা Ruby ক্লাস যা ডেটা স্ট্রিম হ্যান্ডেল করে। এটি কিছুটা কন্ট্রোলারের মতো যা HTTP রিকোয়েস্ট হ্যান্ডেল করে। চলুন আমাদের চ্যাট ফিচারের জন্য একটি চ্যানেল তৈরি করি। আমরা এটিকে UserChatChannel বলব। জেনারেটর ব্যবহার করুন:
rails generate channel UserChat
জেনারেট করা app/channels/user_chat_channel.rb খুলুন এবং নতুন লজিক যোগ করতে আপডেট করুন।
যখন একটি ক্লায়েন্ট UserChatChannel-এ সাবস্ক্রাইব করে (চ্যাট পেজ খুললে), subscribed কলব্যাক আহ্বান করা হয়। আমরা এই কলব্যাকে stream_from "user_chat_channel" কল করতে চাই "user_chat_channel" নামক ব্রডকাস্ট থেকে স্ট্রিমিং শুরু করার জন্য।
মূলত, আমরা বলছি " user_chat_channel স্ট্রিমে ব্রডকাস্ট হওয়া যেকোনো ডেটা শুনো এবং এই চ্যানেলের ক্লায়েন্টদের পাস করো।" এই চ্যানেলে সাবস্ক্রাইব করা সব ইউজার "user_chat_channel"-এ মেসেজ ব্রডকাস্ট পাবে।
আমরা একটি কাস্টম একশনও ডিফাইন করতে চাই, আমরা এটিকে talk(data) বলব। চ্যানেলের যেকোনো পাবলিক মেথড ক্লায়েন্ট সাইড থেকে আহ্বান করা যায়। এই কেসে, যখন ক্লায়েন্ট perform("talk", { content: "Hello World" }) কল করবে, সার্ভারে talk মেথড এক্সিকিউট হবে।
আমাদের talk ইমপ্লিমেন্টেশন ক্লায়েন্টের পাঠানো মেসেজ কন্টেন্ট নেয় এবং ActionCable.server.broadcast ব্যবহার করে সেটি "user_chat_channel"-এ সাবস্ক্রাইব করা সবার কাছে পাঠায়। এর মানে প্রতিটি সাবস্ক্রাইবার (সেন্ডার সহ) রিয়েল-টাইমে মেসেজ ডেটা পাবে। আমরা সিম্পলি একটি হ্যাশ ব্রডকাস্ট করছি যেটিতে মেসেজ টেক্সট থাকে; আপনি চাইলে অন্যান্য ইনফো (যেমন ইউজারনেম বা টাইমস্ট্যাম্প) যোগ করতে পারেন। নোট: রিয়েল অ্যাপে, আপনি এখানে মেসেজ ডেটাবেসে পারসিস্ট করতে পারেন বা ভ্যালিডেশন করতে পারেন। সিম্পলিসিটির জন্য, আমরা শুধু ব্রডকাস্ট করছি।
class UserChatChannel < ApplicationCable::Channel
def subscribed
stream_from "user_chat_channel"
end
def unsubscribed
# চ্যানেল থেকে আনসাবস্ক্রাইব করার সময় যেকোনো ক্লিনআপ
end
def talk(data)
message = data["content"]
ActionCable.server.broadcast("user_chat_channel", { content: message })
end
end
চ্যানেলের কনজিউমার ক্লায়েন্ট সাইডে তৈরি করা
এখন যেহেতু আমরা ব্যাকএন্ড তৈরি করেছি, ফ্রন্ট-এন্ড হুক আপ করতে হবে যাতে ইউজাররা WebSocket-এর মাধ্যমে মেসেজ পাঠাতে ও গ্রহণ করতে পারে রিয়েল-টাইম ফাংশনালিটি ডেমো করার জন্য।
Rails 8 Action Cable-এর জাভাস্ক্রিপ্ট জিনিসগুলো বিল্ট-ইন 갖고 আসে। জেনারেটর একটি app/javascript/channels/user_chat_channel.js ফাইল তৈরি করেছে। আমরা ক্লায়েন্ট বিহেভিয়ার সেখানে ইমপ্লিমেন্ট করব।
app/javascript/channels/user_chat_channel.js খুলুন এবং নিচের মতো আপডেট করুন:
import consumer from "channels/consumer";
const userChatChannel = consumer.subscriptions.create("UserChatChannel", {
connected() {
console.log("Connected to UserChatChannel.");
},
disconnected() {
console.log("Disconnected from UserChatChannel.");
},
received(data) {
const messagesDiv = document.getElementById("messages");
if (messagesDiv && data.content) {
const messageElement = document.createElement("p");
messageElement.textContent = data.content;
messagesDiv.appendChild(messageElement);
}
}
});
function sendMessage(content) {
userChatChannel.perform("talk", { content: content });
}
export { sendMessage };
window.sendMessage = sendMessage;
এখানে আমরা consumer.subscriptions.create("UserChatChannel", {...}) ব্যবহার করছি সার্ভারে আমাদের UserChatChannel-এ একটি সাবস্ক্রিপশন তৈরি করতে। এটি একটি সাবস্ক্রিপশন অবজেক্ট রিটার্ন করে যা আমরা চ্যানেলের সাথে ইন্টারঅ্যাক্ট করতে ব্যবহার করতে পারি।
connected() কলব্যাক কানেকশন স্থাপন হলে চলে। এখানে আমরা কনসোলে লগ করছি যাতে কাজ করছে কিনা দেখতে পাই।
disconnected() কলব্যাক WebSocket ডিসকানেক্ট হলে চলে।
received(data) কলব্যাক গুরুত্বপূর্ণ! এই কলব্যাক ফায়ার হয় যখন আমাদের চ্যানেল সার্ভার থেকে একটি ব্রডকাস্ট পায়। UserChatChannel#talk-এ আমরা { content: message } ব্রডকাস্ট করেছি। এখানে data আর্গুমেন্ট সেটি হ্যাশই হবে। এটি আমাদের চ্যাট লগ ইনস্ট্যান্টে আপডেট করবে সব কানেক্টেড ক্লায়েন্টের জন্য যখন একটি নতুন মেসেজ আসবে।
আমরা একটি হেল্পার sendMessage(content) ডিফাইন করেছি যা userChatChannel.perform("talk", { content: ... }) কল করে। এটি সার্ভার-সাইড talk একশনে একটি রিকোয়েস্ট পাঠায়, ইউজার যে মেসেজ টাইপ করেছে সেটি সহ।
এখন ইউজাররা মেসেজ পাঠাতে ও গ্রহণ করতে পারেন সেটির জন্য একটি সিম্পল UI প্রয়োজন। চলুন আমাদের উদাহরণ অ্যাপের জন্য একটি বেসিক ভিউ তৈরি করি।
আমাদের উদাহরণ অ্যাপের জন্য একটি সিম্পল UI তৈরি করা
প্রথমে, একটি কন্ট্রোলার জেনারেট করুন:
rails generate controller UserChat index
এরপর, index ভিউ খুলুন এবং এটিকে কিছু বেসিক সেটআপ দিন:
<h1>Chats from Users</h1>
<div id="messages" style="border: 1px solid #ccc; padding: 1em; height: 200px; overflow-y: auto; margin-bottom: 1em;">
<!-- Messages will appear here -->
</div>
<form id="chat-form" onsubmit="event.preventDefault(); sendMessage(document.getElementById('chat-input').value); document.getElementById('chat-input').value = '';">
<input type="text" id="chat-input" placeholder="Type a message..." autocomplete="off" style="width: 80%;" />
<button type="submit">Send</button>
</form>
শেষে, রুট রাউট সেট আপ করুন এই নতুন রাউটে পয়েন্ট করতে config/routes.rb-এ:
root "user_chat#index"
সব কিছু কীভাবে একসাথে কাজ করে তা দেখানো
আমাদের সিম্পল চ্যাট অ্যাপ টেস্ট করার জন্য রেডি! প্রজেক্টটি bin/dev দিয়ে চালান এবং localhost:3000 ভিজিট করুন:

রিয়েল-টাইম আপডেট দেখাতে, অ্যাপটি দুটি আলাদা ব্রাউজার ট্যাবে খুলুন। একটিতে "Hello from tab number 1!" লিখুন।
দ্বিতীয় ট্যাব থেকে মেসেজ পাঠালে, আপনি প্রথম ট্যাবে সেটি দেখতে পাবেন!

Rails Action Cable প্রোডাকশনে ডিপ্লয় করা
Solid Cable WebSocket মেসেজগুলো একটি ডেটাবেস টেবিলে স্টোর করে, এবং আমাদের উদাহরণে ডিফল্ট cable ডেটাবেস ব্যবহার করা হয়েছে। Rails 8 নতুন অ্যাপের জন্য Solid Cable-এ SQLite ডিফল্টভাবে ব্যবহার করে, কিন্তু আপনি টেকনিক্যালি যেকোনো Rails-সাপোর্টেড ডেটাবেসে পয়েন্ট করতে পারেন config/database.yml-এ cable সেকশন যোগ করে।
সच বললে, প্রোডাকশনে Solid Cable-এর জন্য আলাদা ডেটাবেস ব্যবহার করা রিকমেন্ড করা হয় রিয়েল-টাইম মেসেজিং লোডকে আপনার বাকি ডেটা থেকে আলাদা রাখতে। উদাহরণস্বরূপ, আপনি Solid Cable-এর জন্য একটি ডেডিকেটেড app_production_cable ডেটাবেস প্রোভিশন করতে পারেন যখন আপনার প্রাইমারি অ্যাপ ডেটা app_production-এ থাকে।
এই পৃথকতা চ্যাট বা নোটিফিকেশন ট্রাফিককে আপনার মেইন অ্যাপ্লিকেশন কোয়েরির সাথে কন্টেন্ড করতে থেকে রক্ষা করে। অর্থাৎ, ছোট অ্যাপের জন্য, একই ডেটাবেস ব্যবহার করা উচিত হবে অ্যাপ ডেটা এবং Cable মেসেজ দুটির জন্য।
নন-অবভাস পার্ট হলো Solid Cable ডেটাবেস আপনার ডিপ্লয়মেন্ট সেটআপে ইনক্লুড করা নিশ্চিত করা। আপনি যদি আলাদা ডেটাবেস ব্যবহার করেন, মনে রাখবেন rails db:prepare বা rails db:migrate চালাতে হবে যাতে Rails প্রোডাকশনে messages টেবিল তৈরি করে।
মনে রাখবেন যে প্রতিটি WebSocket কানেকশন সার্ভার মেমরি খরচ করে, তাই নিশ্চিত করুন আপনার সার্ভারের পর্যাপ্ত রিসোর্স আছে আপনার প্রয়োজনীয় কানেকশন সংখ্যা হ্যান্ডেল করার জন্য।
পোলিং ইন্টারভাল কনফিগার করা
Solid Cable-এর পোলিং ফ্রিকোয়েন্সি কনফিগারেবল, যা আপনাকে লেটেন্সি এবং ডেটাবেস লোডের মধ্যে ব্যালেন্স করতে দেয়। ইন্টারভাল কমালে অধিক ঘন ঘন পোলিং হবে, যা নতুন মেসেজ পিক আপ করার সময় কমাবে, কিন্তু আপনার ডেটাবেসে অধিক SELECT কোয়েরির খরচ হবে।
বিপরীতভাবে, লম্বা ইন্টারভাল ডেটাবেস ইউজ কমাবে কিন্তু ব্রডকাস্ট এবং আপডেটে বেশি ডিলে সৃষ্টি করবে। প্র্যাকটিসে, ডিফল্ট 0.1s (প্রতি সেকেন্ডে ১০ বার পোল) একটি ভালো সার্টিং পয়েন্ট যা অধিকাংশ ডেটাবেসকে ওভারওয়েলম না করেই প্রায় রিয়েল-টাইম আপডেট দেয়।
Solid Cable Solid Trifecta-র একটি অপরিহার্য স্তম্ভ
আপনি দেখেছেন কীভাবে Rails Action Cable WebSocket রেইলসে আনার জন্য রিয়েল-টাইম কমিউনিকেশন, এবং কীভাবে Solid Cable Redis ছাড়া এটা সম্ভব করে। আপনি কি জানতেন Rails-এ দুইটি অন্য "Solid" লাইব্রেরি আছে? Solid Cache Redis ছাড়া ক্যাশিং সহজ করে, এবং Solid Queue Redis ছাড়া ব্যাকগ্রাউন্ড জব প্রসেস করতে দেয়।
"Solid Trifecta" ব্যবহার করলে আপনাকে একটি বিস্ময়কর ফাংশনাল ফ্রেমওয়ার্ক মিনিমাল ইনফ্রাস্ট্রাকচার ওভারহেডের সাথে ইন্টারঅ্যাক্টিভ অ্যাপ্লিকেশন বিল্ড করার জন্য मिलে।
Solid Cable এবং এর সহচরদের মূল সুবিধা হলো সিম্পলিসিটি। আমাদের Rails অ্যাপের রিয়েল-টাইম ফাংশনালিটি বক্সের বাইরে থেকে কাজ করে শুধু অ্যাপের ডেটাবেস ব্যাকএন্ডে। ডিপ্লয়মেন্ট সহজ (Redis বা অতিরিক্ত সার্ভিস নেই), এবং অনেক অ্যাপ্লিকেশনের জন্য পারফরম্যান্স যথেষ্টের চেয়ে বেশি।
বেশক, যেকোনো Rails অ্যাপ্লিকেশন প্রোডাকশনে চালালে, আপনাকে এটা মনিটর করতে হবে যেসব ইস্যু আপনার ব্যবহারকারীরা মুখোমুখি হতে পারে। আপনি কি চান না আপনার Action Cable কনজিউমার এবং চ্যানেলের সমস্যা আপনার ব্যবহারকারীদের আগে জানতে?
Honeybadger Rails এরর এবং পারফরম্যান্স মনিটরিং-এর জন্য একটি চমৎকার পছন্দ, যা রিয়েল-টাইম অ্যাপ্লিকেশন ডিপ্লয় করার জন্যкриটিক্যাল। Honeybadger আপনাকে ইনস্ট্যান্ট সতর্কতা দেয় যখন কোথাও আপনার অ্যাপ্লিকেশনে এরর হয়—ব্যাকএন্ডে এবং ক্লায়েন্ট সাইডে—এবং আপনার অ্যাপ্লিকেশন লগ এবং পারফরম্যান্স ডেটা খোঁজে বের করে দ্রুত সার্চ, ট্রাবলশুটিং, এবং রেজোলিউশনের জন্য।
Honeybadger-এ সাইন আপ করুন শুরু করতে!