WebSockets as a Service

foony.com-এর চ্যাট আর লাইভ ডেটার পেছনের ম্যানেজড রিয়েলটাইম প্ল্যাটফর্ম, foony.io-তে প্রতিটি ডেভেলপারের জন্য খোলা।

একটা WebSocket সার্ভিস তোমার সার্ভার আর প্রতিটি কানেক্টেড ক্লায়েন্টের মধ্যে একটা স্থায়ী কানেকশন খোলা রাখে, তাই আপডেট পরের পেজ রিফ্রেশে নয়, ঘটার মুহূর্তেই আসে। Foony Realtime তোমার হয়ে অগ্ল্যামারাস কাজগুলো করে দেয়: কানেকশন, রিকানেক্ট, ফ্যান-আউট, প্রেজেন্স, আর মেসেজ ইতিহাস, সবই একটা ছোট SDK-র পেছনে।

1.5Mমাসিক প্লেয়ার সেবা দেওয়া
500M+মাসে ডেলিভার হওয়া মেসেজ
<100msp95 ফ্যান-আউট লক্ষ্য

লাইভ চেষ্টা করে দেখো

নিচের সবকিছু এখনই realtime.foony.io-র প্রোডাকশন সার্ভিসের বিরুদ্ধে চলছে। এই পেজটা দ্বিতীয় একটা ট্যাবে খোলো আর দেখো দুটো একে অপরকে প্রতিফলিত করছে।

প্রেজেন্স আর লাইভ কার্সর

এই পেজ পড়ছে এমন সবাই এখানে দেখা যায়, একদম চ্যানেল প্রেজেন্স থেকে। কার্সরের অবস্থান এফিমেরাল মেসেজ হিসেবে যায়, সেই লো-লেটেন্সি টিয়ার যা স্টোরেজ পুরোপুরি এড়িয়ে যায়।

এখন এখানে 1 জনতোমার মাউস নাড়াও। হাত নাড়তে ক্লিক করো।

লাইভ চ্যাট

এটা এই পেজের আসল চ্যাট, একই @foony/chat রুম যেটার উপর প্রতিটি Foony পেজ আর গেম রুম চলে। মেসেজ ইতিহাস সহ একটা চ্যানেলে আসে, আর পাঠানো Foony-র সার্ভারের মধ্য দিয়ে যায় তাই প্রতিটি মেসেজ মডারেট করা হয়।

কেউ সম্প্রতি কিছু বলেনি। তুমিই বরফ ভাঙো।

ডেটাবেস সিঙ্ক

এটা foony.com-এর প্রোডাকশন পাইপলাইন: যেকোনো Foony ইউজারনেম টাইপ করো আর তাদের পাবলিক Postgres রো সাইটের WebSocket-এর মাধ্যমে স্ট্রিম হয়ে আসে, তারপর তারা খেলার সাথে সাথে লাইভ আপডেট হতে থাকে। কোনো পোলিং নেই, কোনো API এন্ডপয়েন্ট নেই।

খুঁজছি…

টিমগুলো কেন WebSockets নিজে না বানিয়ে কিনে নেয়

  • এমন রিকানেক্ট যা মেসেজ হারায় না. ব্রাউজার সারাক্ষণ কানেকশন ছেড়ে দেয়। ক্লায়েন্টরা হিস্টরি রিপ্লে দিয়ে যেখানে ছিল সেখান থেকে ফিরে আসে, তাই দুর্বল কানেকশন মানে মেসেজ মিস হওয়া নয়।
  • বড় স্কেলে ফ্যান-আউট. এক সেকেন্ডেরও কমে একটা মেসেজ এক লক্ষ সাবস্ক্রাইবারের কাছে পৌঁছে দেওয়া একটা কঠিন ডিস্ট্রিবিউটেড সিস্টেম সমস্যা। এখানে, এটাই পুরো কাজ।
  • হিসাব রাখার ঝামেলা ছাড়া প্রেজেন্স. এখন কে অনলাইনে আছে দেখো আর এন্টার, আপডেট, ও লিভ ইভেন্টে সাড়া দাও, নিজের হার্টবিট আর টাইমআউট লজিক না লিখেই।
  • কোনো ক্যাপাসিটি প্ল্যানিং নেই. WebSocket সার্ভার স্টেটফুল, তাই নিজে সেগুলো স্কেল করা মানে ড্রেনিং, শার্ডিং, আর স্টিকি রাউটিং। একটা ম্যানেজড সার্ভিস সেটা অন্য কারো মাথাব্যথা করে দেয়।

Foony Realtime দিয়ে তুমি যা পাও

চ্যানেল আর পাব/সাব

WebSocket বা REST-এর মাধ্যমে অ্যাপ-স্কোপড চ্যানেলে (যেমন chat:lobby) নামযুক্ত ইভেন্ট ফ্যান আউট করো, অনুমানযোগ্য ডেলিভারি সিম্যান্টিক্স সহ।

প্রেজেন্স

কে অনলাইনে আছে ট্র্যাক করো, মেম্বারশিপ স্বয়ংক্রিয়ভাবে রিফ্রেশ করো, আর এন্টার, আপডেট, ও লিভ ইভেন্টে সাড়া দাও।

মেসেজ হিস্টরি

ডিউরেবল স্টোরেজ থেকে সাম্প্রতিক মেসেজ রিপ্লে করো যাতে রিকানেক্টের পরে ক্লায়েন্টরা পরিষ্কারভাবে ফিরে আসতে পারে।

টোকেন অথ

তোমার ব্যাকএন্ড থেকে চ্যানেল-লেভেল পাবলিশ, সাবস্ক্রাইব, প্রেজেন্স, আর হিস্টরি পারমিশন সহ স্বল্পস্থায়ী ক্লায়েন্ট টোকেন তৈরি করো।

Pusher কম্প্যাটিবল

Pusher প্রোটোকল বোঝে, তাই pusher-js আর Laravel Echo অ্যাপ পুরো রিরাইট না করে শুধু একটা কনফিগারেশন বদল দিয়ে কানেক্ট হয়।

ডেটাবেস সিঙ্ক

Postgres-এর পরিবর্তন সরাসরি সাবস্ক্রাইব করা ক্লায়েন্টদের কাছে লাইভ কোয়েরি হিসেবে স্ট্রিম করো, কোনো পোলিং নেই আর কোনো গ্লু কোড নেই।

পুরো ইন্টিগ্রেশনটা কয়েক লাইনের ব্যাপার:

const realtime = new Realtime({ authCallback });
const channel = realtime.channels.get('chat:lobby');

channel.on((message) => {
  showMessage(message.data);
});

await channel.publish('message', { text: 'hello' });
await channel.presence.enter({ name: 'Acorn' });

সত্যিকারের গেমে যুদ্ধে পরীক্ষিত

Foony আমাদের চ্যাট আর রিয়েলটাইম ডেটাবেস আপডেটের জন্য Foony Realtime-কে ব্যাপকভাবে ব্যবহার করে। প্রতি মাসে প্রায় ১৫ লাখ প্লেয়ার foony.io-এর ওপর নির্ভর করে প্রায় ৫০ কোটি মেসেজের জন্য, আর একটা মাল্টিপ্লেয়ার গেম তখনই ঠিক লাগে যখন সেগুলো দ্রুত, ঠিক ক্রমে, আর ঠিক একবার এসে পৌঁছায়। foony.io-এর নির্ভরযোগ্যতা আর সাশ্রয়ীতা ছাড়া Foony সম্ভবই হতো না।

8 Ball Pool online multiplayer billiards thumbnailDinoMight Bomberman style online multiplayer thumbnailChess online multiplayer board thumbnail9 Ball Pool online multiplayer billiards thumbnailSnooker online multiplayer thumbnailCarrom board game online multiplayer thumbnail

এটা কাজ করতে দেখো আমাদের গেমগুলোর যেকোনোটিতে, তারপর foony.io-তে একটা ড্যাশবোর্ড আর একটা SDK-সহ সেই একই ইনফ্রাস্ট্রাকচার পাও।

বাল্বি, Foony-র ম্যাসকট

তোমার নিজের ট্রাফিকে এটা চেষ্টা করে দেখো

ফ্রি টিয়ারে প্রতি মাসে ৯০ লাখ মেসেজ অন্তর্ভুক্ত। কোনো ক্রেডিট কার্ড লাগবে না।

প্রায়ই জিজ্ঞেস করা প্রশ্ন

WebSockets as a service কী?

এটা একটা ম্যানেজড প্ল্যাটফর্ম যা তোমার অ্যাপ আর তার ইউজারদের মধ্যে স্থায়ী কানেকশনগুলোর মালিকানা রাখে। নিজের WebSocket সার্ভার চালানোর বদলে তোমার ক্লায়েন্টরা সার্ভিসে কানেক্ট করে, তোমার ব্যাকএন্ড একটা SDK বা REST-এর মাধ্যমে চ্যানেলে মেসেজ পাবলিশ করে, আর সার্ভিসটা ডেলিভারি, রিকানেক্ট, প্রেজেন্স, আর হিস্ট্রি সামলায়।

Foony Realtime, Pusher বা Ably থেকে কীভাবে আলাদা?

এটা চ্যানেল, প্রেজেন্স, হিস্ট্রি, আর টোকেন অথ-এর একই মূল ক্ষেত্র কভার করে, আর এটা Pusher প্রোটোকল বোঝে, তাই এটা একটা ড্রপ-ইন Pusher বিকল্প হিসেবে কাজ করে। পার্থক্য হলো উৎস আর দাম। এটা foony.com-এর জন্য বানানো, আমাদের নিজের মাল্টিপ্লেয়ার গেম সাইট, আর ফ্রি টিয়ারে প্রতি মাসে ৯০ লাখ মেসেজ অন্তর্ভুক্ত।

সুইচ করতে আমাকে কি আমার অ্যাপ নতুন করে লিখতে হবে?

সাধারণত না। pusher-js আর Laravel Echo অ্যাপগুলো একটা কনফিগারেশন বদলে Foony Realtime-এর দিকে নির্দেশ করতে পারে। নতুন প্রজেক্টগুলো ব্যবহার করে JavaScript আর TypeScript-এর জন্য @foony/realtime SDK, Go SDK, বা REST API যেকোনো ল্যাঙ্গুয়েজ থেকে।

এর দাম কত?

ফ্রি টিয়ারে প্রতি মাসে ৯০ লাখ মেসেজ অন্তর্ভুক্ত। পেইড প্ল্যানগুলো মাসিক ক্যাপাসিটি যোগ করে, আর তোমার প্ল্যানের ওপরে ব্যবহার প্রতি মিলিয়ন মেসেজ হিসেবে বিল করা হয়। বর্তমান সংখ্যাগুলো আছে foony.io/pricing.

8 Ball Pool online multiplayer billiards icon