রিয়েল-টাইম বৈশিষ্ট্যগুলি ওয়েব অ্যাপ্লিকেশনগুলিতে ক্রমবর্ধমান গুরুত্বপূর্ণ হয়ে উঠছে, কিন্তু প্রতিটি রেল ডেভেলপার অ্যাকশন কেবল, ফ্রেমওয়ার্কের অন্তর্নির্মিত ওয়েবসকেট লাইব্রেরির সাথে পরিচিত নয়৷
Rails Action Cable দীর্ঘ সময় ধরে ওয়েব সকেট সমর্থিত, কিন্তু কিছু অতিরিক্ত জটিলতার সাথে আসে। রেল 8 সলিড কেবল প্রবর্তন করে , অ্যাকশন কেবলের জন্য একটি নতুন ডাটাবেস-সমর্থিত অ্যাডাপ্টার যা Redis-এর প্রয়োজনীয়তা দূর করে। এই নির্দেশিকায়, আমি আপনাকে সলিড কেবলের মাধ্যমে অ্যাকশন কেবলের মাধ্যমে নিয়ে যাবো এবং কীভাবে একটি রিয়েল-টাইম বৈশিষ্ট্য তৈরি করতে হয় তা দেখাব। আপনি দেখতে পাবেন যে রেডিস নিয়ে বিরক্ত না করে একটি Rails 8 অ্যাপে রিয়েল-টাইম কার্যকারিতা যোগ করা কতটা সহজ৷
আমি আপনাকে অনুসরণ করতে এবং আমার সাথে অ্যাপটি তৈরি করতে উত্সাহিত করব, তবে GitHub-এ সমাপ্ত প্রকল্পটি দেখতে আপনাকে স্বাগত জানাই৷
কেন রেল অ্যাকশন ক্যাবল ব্যবহার করবেন?
আধুনিক ওয়েব অ্যাপ্লিকেশনগুলিকে প্রায়ই রিয়েল টাইমে ক্লায়েন্টদের কাছে আপডেটগুলি পুশ করতে হয়। কিছু সুস্পষ্ট উদাহরণের মধ্যে রয়েছে চ্যাট বার্তাগুলি অবিলম্বে উপস্থিত হওয়া বা লাইভ ড্যাশবোর্ড বিজ্ঞপ্তিগুলি৷ অ্যাকশন ক্যাবল আপনার অ্যাপে WebSockets একীভূত করার জন্য Rails এর অন্তর্নির্মিত সমাধান, সার্ভার এবং ক্লায়েন্টের মধ্যে দ্বিমুখী, অবিরাম যোগাযোগ সক্ষম করে। আমি রেল ফ্রেমওয়ার্কের অংশ হিসাবে অ্যাকশন ক্যাবলের জন্য ব্যক্তিগতভাবে কৃতজ্ঞ, কারণ এটি একটি সত্যিকারের দরকারী ওয়েব অ্যাপের জন্য আপনার প্রয়োজনীয় সমস্ত কিছু দেওয়ার সামগ্রিক থিমকে সমর্থন করে৷ অ্যাকশন কেবল ব্যবহার করার অর্থ হল সার্ভার ব্রাউজারকে স্পষ্টভাবে অনুরোধ না করেই ব্রাউজারে ডেটা পাঠাতে পারে (ব্যবহারকারী-প্রম্পটেড রিফ্রেশ নয়!)।
অ্যাকশন কেবল এবং ওয়েবসকেটগুলির সাথে, আপনার রেল অ্যাপ লাইভ ইন্টারেক্টিভ বৈশিষ্ট্যগুলি সরবরাহ করতে পারে যা একটি সার্ভার-রেন্ডার করা অ্যাপে বাস্তবায়ন করা ঐতিহাসিকভাবে কঠিন ছিল। এর জন্য কিছু দৈনন্দিন ব্যবহারের ক্ষেত্রে হল:
- লাইভ চ্যাট অ্যাপ্লিকেশন
- বিজ্ঞপ্তি এবং ফিড
- লাইভ আপডেট সহ সহযোগী অ্যাপস
- লাইভ স্পোর্টস বা স্টক টিকার
সংক্ষেপে, অ্যাকশন কেবল ঐতিহ্যগত অনুরোধ-প্রতিক্রিয়া চক্র এবং রিয়েল-টাইম ইভেন্ট-চালিত আপডেটের মধ্যে ব্যবধান পূরণ করে। ক্লায়েন্টের দিক থেকে, রেল চ্যানেলে সদস্যতা নিতে এবং সম্প্রচার গ্রহণের জন্য একটি জাভাস্ক্রিপ্ট গ্রাহককে প্রদান করে। বিকাশকারী হিসাবে, আপনি ব্যাকএন্ড চ্যানেলগুলি (কন্ট্রোলারের মতো, কিন্তু রিয়েল-টাইম স্ট্রিমগুলির জন্য) সংজ্ঞায়িত করে অ্যাকশন কেবলের সাথে ইন্টারঅ্যাক্ট করেন যা ফ্রন্ট-এন্ড ক্লায়েন্টরা সদস্যতা নিতে পারে৷
তখন সলিড ক্যাবল কি?
আপনি যদি পূর্ববর্তী রেল সংস্করণগুলিতে অ্যাকশন কেবল ব্যবহার করে থাকেন তবে আপনি জানেন যে উত্পাদনে এটি সাধারণত রেডিস (বা PostgreSQL এর NOTIFY উপর নির্ভর করে। ) বিভিন্ন সার্ভার প্রক্রিয়া জুড়ে বার্তা সম্প্রচার করতে। পাব/সাব পরিষেবা (প্রায়শই রেডিস) নিশ্চিত করে যে একটি রেল প্রক্রিয়া থেকে একটি বার্তা অন্য সমস্ত প্রক্রিয়াগুলিতে পৌঁছে দেওয়া হয় যাতে তারা এটি তাদের সংযুক্ত ওয়েবসকেট ক্লায়েন্টদের কাছে ফরোয়ার্ড করতে পারে। এই যোগ করা অবকাঠামোটি ঐতিহাসিকভাবে অ্যাকশন কেবল ব্যবহার করার জন্য প্রয়োজনীয়।
সলিড ক্যাবল, রেল 8-এ প্রবর্তিত, ব্যাকএন্ড হিসাবে আপনার বিদ্যমান ডাটাবেস ব্যবহার করে রেডিসের মতো একটি বহিরাগত পাব/সাব পরিষেবার প্রয়োজনীয়তা প্রতিস্থাপন করে। সলিড কেবল হল অ্যাকশন কেবলের জন্য একটি ডাটাবেস-সমর্থিত অ্যাডাপ্টার, অনেকটা সক্রিয় কাজের জন্য সলিড কিউ এবং সক্রিয় ক্যাশের জন্য সলিড ক্যাশের মতো। প্রতিটি ইনকামিং WebSocket বার্তা একটি ডাটাবেস টেবিলে লেখা হয়, এবং সমস্ত অ্যাকশন কেবল দৃষ্টান্ত ক্লায়েন্টদের কাছে নতুন বার্তা সম্প্রচারের জন্য সেই টেবিলটি পোল করে। এটি খুব দ্রুত ঘটে (ডিফল্টরূপে, প্রতি 100 মিলিসেকেন্ডে), রিয়েল-টাইম কার্যক্ষমতা প্রদান করে। বার্তাগুলি ছাঁটাই করার আগে অল্প সময়ের জন্য (ডিফল্টভাবে 24 ঘন্টা) সংরক্ষণ করা হয়, যাতে আপনি ডেটাবেস স্থান সম্পর্কে চিন্তা না করে সাম্প্রতিক সমস্যাগুলি ডিবাগ করতে পারেন৷
সামগ্রিকভাবে, সলিড কেবলটি "সলিড ট্রাইফেক্টা" এর রেলস 8 এর দর্শনের সাথে খাপ খায়, যা ক্যাশিং, ব্যাকগ্রাউন্ড কাজ এবং রিয়েল-টাইম মেসেজিংয়ের জন্য অন্তর্নির্মিত, ডাটাবেস-সমর্থিত বৈশিষ্ট্যগুলির একটি সম্পূর্ণ সেট। সলিড কেবলের সাথে, আপনার ডাটাবেসের মাধ্যমে কাজ, ক্যাশিং এবং ওয়েবসকেটগুলি চালানোর জন্য আপনার কাছে চূড়ান্ত অংশ রয়েছে৷
সলিড কেবল দিয়ে একটি Rails 8 অ্যাপ তৈরি করা
আপনি সম্ভবত সলিড কেবলের সাথে হ্যান্ডস-অন করতে আগ্রহী, তাই আসুন এটিকে একটি Rails 8 অ্যাপ্লিকেশানে যুক্ত করা এবং একটি ন্যূনতম চ্যাট রুম তৈরি করা যেখানে একাধিক ব্যবহারকারী রিয়েল টাইমে বার্তা বিনিময় করতে পারে।
একটি উদাহরণ অ্যাপ তৈরি করা
ব্যাকএন্ড হিসাবে সলিড কেবল ব্যবহার করার সময় আপনি অ্যাকশন কেবলের মৌলিক বিষয়গুলি (চ্যানেল, সদস্যতা, সম্প্রচার) শিখবেন। আমরা এই উদাহরণের জন্য Rails 8 ব্যবহার করতে যাচ্ছি, তাই এগিয়ে যান এবং এর সাথে একটি নতুন Rails অ্যাপ তৈরি করুন:
rails _8.1.0_ new solid_cable_chat --database=sqlite3
তারপর, cd নতুন solid_cable_chat ডিরেক্টরিতে।
যেহেতু আপনি Rails 8 ব্যবহার করেছেন, তাই রোলিং পেতে আপনাকে সলিড কেবল বা অন্য কোনো রত্ন যোগ করতে হবে না। বেশিরভাগ বা সমস্ত কনফিগারেশন আপনার জন্য থাকবে। আপনি যদি রেলের একটি পুরানো সংস্করণ থেকে আসছেন তবে আমি আপনাকে এটির মধ্যে দিয়ে যাব৷
সলিড কেবল কনফিগার করা হচ্ছে
আমরা সলিড কেবল সেটআপ চালানোর মাধ্যমে শুরু করব:
bin/rails solid_cable:install
এই জেনারেটর দুটি প্রধান কাজ করে। এটি একটি config/cable.yml তৈরি করে কনফিগারেশন ফাইল যা তারের অ্যাডাপ্টার হিসাবে সলিড কেবল সেট করে। এটি একটি db/cable_schema.rbও তৈরি করে ফাইল, যাতে সলিড কেবলের বার্তা টেবিলের জন্য ডাটাবেস স্কিমা সংজ্ঞা রয়েছে। রেলের সাম্প্রতিক সংস্করণগুলি rails new চালানোর সময় স্বয়ংক্রিয়ভাবে এই ফাইলগুলি তৈরি করে .
এর পরে, আমাদের সলিড কেবলের জন্য আমাদের ডাটাবেস সেটিংস কনফিগার করতে হবে। ডিফল্টরূপে, রেল আপনার বাকি ডেটা থেকে রিয়েল-টাইম মেসেজিং ডেটা আলাদা করতে সলিড কেবলের জন্য একটি পৃথক ডাটাবেস ব্যবহার করে। বিকাশে, আপনি একই ডাটাবেস ব্যবহার করতে পারেন বা একটি পৃথক সেট আপ করতে পারেন। উন্নয়নে সলিড কেবলের জন্য কীভাবে একটি পৃথক SQLite ডাটাবেস ব্যবহার করবেন তা আমি আপনাকে নিয়ে চলে যাব। এর মানে হল একটি নতুন "কেবল" ডাটাবেস সংযোগ যোগ করা৷
৷সলিড কেবলের জন্য আপনার ডাটাবেস সেট আপ করা হচ্ছে
config/database.yml খুলুন ফাইল বিকাশ বিভাগে, একটি cable যোগ করুন ডাটাবেস উদাহরণস্বরূপ, আপনি যদি SQLite (dev এর জন্য 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
আবার, আপনি যদি রেলের সাম্প্রতিক পর্যাপ্ত সংস্করণে থাকেন তবে এই কনফিগারেশনটি ইতিমধ্যেই থাকবে৷
এখন config/cable.yml খুলুন . সলিড কেবলটি ইতিমধ্যেই উত্পাদনে ডিফল্ট অ্যাডাপ্টার হওয়া উচিত। আমরা উন্নয়নেও সলিড কেবল সক্ষম করতে চাই (তাই আমরা লোকালহোস্টে আমাদের চ্যাট পরীক্ষা করতে পারি)। 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 সেটিং অ্যাকশন ক্যাবলকে তারের ব্যবহার করতে বলে ডাটাবেস (যেমন database.yml এ সংজ্ঞায়িত করা হয়েছে ) বার্তা সংরক্ষণের জন্য। আপনাকে রেলের সাম্প্রতিক সংস্করণেও এই পরিবর্তন করতে হবে।
ছোট অ্যাপ্লিকেশানগুলির জন্য, আপনি সলিড কেবলের টেবিলটি ধরে রাখতে একই প্রাথমিক ডাটাবেস ব্যবহার করতে পারেন (স্কিমাটিকে মাইগ্রেশনে অনুলিপি করে এবং পৃথক ডিবি কনফিগারেশন সরিয়ে)। কিন্তু আপনার প্রাথমিক অ্যাপ ডেটার সাথে কোনো সম্ভাব্য পারফরম্যান্স হস্তক্ষেপ এড়াতে একটি পৃথক ডাটাবেস ব্যবহার করার পরামর্শ দেওয়া হয়।
অবশেষে, rails db:prepare চালান ডাটাবেস প্রস্তুত নিশ্চিত করতে। আপনি যদি আপনার অ্যাপটি শিপিং করেন তবে আপনাকে এটি উত্পাদনে করতে হবে৷
একটি অ্যাকশন কেবল চ্যানেল সেট আপ করা
অ্যাকশন কেবল চ্যানেলগুলির মাধ্যমে কাজ করে, যা রুবি ক্লাস যা ডেটা স্ট্রিম পরিচালনা করে। এটি 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
# Any cleanup needed when unsubscribing from the channel
end
def talk(data)
message = data["content"]
ActionCable.server.broadcast("user_chat_channel", { content: message })
end
end
ক্লায়েন্টের মধ্যে আমাদের চ্যানেলের একজন ভোক্তা তৈরি করা
এখন যেহেতু আমরা ব্যাকএন্ড তৈরি করেছি, আমাদের ফ্রন্ট-এন্ড হুক আপ করতে হবে যাতে ব্যবহারকারীরা রিয়েল-টাইম কার্যকারিতা প্রদর্শনের জন্য ওয়েবসকেটের মাধ্যমে বার্তা পাঠাতে এবং গ্রহণ করতে পারে।
Rails 8 অ্যাকশন ক্যাবলের জাভাস্ক্রিপ্ট স্টাফের সাথে আসে। জেনারেটর একটি 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
এরপরে, ইনডেক্স ভিউ খুলুন এবং এটিকে কিছু মৌলিক সেটআপ দিন:
<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 এ যান :

রিয়েল-টাইম আপডেটগুলি দেখাতে, দুটি ভিন্ন ব্রাউজার ট্যাবে অ্যাপটি খুলুন। একটি ট্যাবে, একটি বার্তা লিখুন যেমন "ট্যাব নম্বর 1 থেকে হ্যালো!"
৷
যদি আপনি দ্বিতীয় ট্যাব থেকে একটি বার্তা পাঠান, আপনি এটি প্রথম ট্যাবে উপস্থিত দেখতে পাবেন!

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