सुविधाएँ
रियलटाइम का कठिन हिस्सा, पहले से चालू
कोई रियलटाइम सुविधा थोड़े-से प्रोडक्ट कोड के नीचे बिछी बहुत सारी डिलीवरी मशीनरी होती है: कौन सब्सक्राइब है, किसे अनुमति है, कौन अब भी वहाँ है। PushCaster वही दूसरा हिस्सा है।
Channels
चार तरह के, और उपसर्ग ही अनुबंध है
चैनल का नाम तय करता है कि वह कैसा बर्ताव करेगा। उपसर्ग लाइब्रेरी को बताता है कि उसे आपके सर्वर से प्राधिकरण माँगना है या नहीं, सदस्यों की सूची की उम्मीद करनी है या नहीं, और एन्क्रिप्ट करना है या नहीं।
| उपसर्ग | कौन सब्सक्राइब कर सकता है | किसलिए है | प्राधिकरण |
|---|---|---|---|
| public | जिसके पास भी app key हो। | build की स्थिति, लाइव स्कोर, सार्वजनिक फ़ीड। | कोई नहीं |
| private- | आपका सर्वर तय करता है, हर सब्सक्राइबर के लिए अलग। | हर वह चीज़ जो किसी खाते या किसी संसाधन तक सीमित है। | हस्ताक्षरित |
| presence- | प्राधिकृत, और सदस्यों की सूची भी लाता है। | कमरे और सत्र, जहाँ सदस्यता ही सुविधा है। | हस्ताक्षरित |
| private-encrypted- | प्राधिकृत; पेलोड आपके क्लाइंट एन्क्रिप्ट करते हैं। | वे पेलोड जो हमारे लिए भी अपठनीय रहने चाहिए। | हस्ताक्षरित |
cache- चैनल लाइव इवेंट पहुँचाते हैं पर सहेजी हुई स्थिति दोबारा नहीं चलाते — देखिए ज्ञात अंतर.
प्राधिकरण
अधिकार आपके सर्वर के पास ही रहता है
private और presence सब्सक्रिप्शन हम नहीं देते। वे आपका ऐप्लिकेशन देता है, और अपने जवाब पर आपके app सीक्रेट से हस्ताक्षर करता है। हम हस्ताक्षर जाँचते हैं, और बस।
- एक एंडपॉइंटPOST /pusher/auth अपने अनुरोध और जवाब का आकार वैसा ही रखता है।
- आपके नियमयह सॉकेट इस चैनल में जुड़ सकता है या नहीं — इसका जवाब सिर्फ़ आप दे सकते हैं।
- presence में पहचानवही कॉल मेंबर id लौटाती है और वह सब भी जो बाक़ी सदस्यों को दिखना चाहिए।
import Pusher from 'pusher'const pusher = new Pusher({ appId: process.env.PUSHCASTER_APP_ID, key: process.env.PUSHCASTER_KEY, secret: process.env.PUSHCASTER_SECRET, host: 'api-eu1.pushcaster.io', useTLS: true,})// Called by the client library whenever it subscribes to a// private-, presence- or private-encrypted- channel.app.post('/pusher/auth', (req, res) => { const { socket_id, channel_name } = req.body const user = req.session.user if (!user || !mayJoin(user, channel_name)) { return res.sendStatus(403) } res.send( pusher.authorizeChannel(socket_id, channel_name, { user_id: String(user.id), user_info: { name: user.name }, }), )})Webhooks
सॉकेट परत जो देखती है, आपका बैकएंड वही सुनता है
उपस्थिति-गणना और सदस्यता सिर्फ़ कनेक्शन पर दिखती हैं। वेबहुक उन्हें हस्ताक्षरित करके वापस भेजते हैं — ताकि पहला दर्शक आते ही आप काम शुरू करें और आख़िरी के जाते ही रोक दें।
| Event | कब चलता है |
|---|---|
| channel_occupied | पहला सब्सक्राइबर किसी ख़ाली चैनल में जुड़ा। |
| channel_vacated | आख़िरी सब्सक्राइबर चला गया। |
| member_added | कोई presence चैनल में जुड़ा। |
| member_removed | कोई presence चैनल से चला गया। |
| client_event | किसी क्लाइंट ने सीधे किसी चैनल को इवेंट भेजा। |
| cache_miss | किसी cache चैनल से ऐसी स्थिति माँगी गई जो उसके पास नहीं थी। |
app.post('/pushcaster/webhooks', (req, res) => { const hook = pusher.webhook({ headers: req.headers, rawBody: req.rawBody }) // The signature is computed with your app secret, so an // unsigned or mismatched delivery never reaches your logic. if (!hook.isValid()) return res.sendStatus(401) for (const event of hook.getEvents()) { if (event.name === 'channel_occupied') startFeed(event.channel) if (event.name === 'channel_vacated') stopFeed(event.channel) } res.sendStatus(200)})लाइब्रेरियाँ
PushCaster का कोई SDK नहीं है, जान-बूझकर
PushCaster तार पर Pusher Channels प्रोटोकॉल बोलता है, इसलिए आधिकारिक लाइब्रेरियाँ उसके साथ बिना बदलाव के चलती हैं। जोड़ने के लिए हमारा कोई पैकेज नहीं, और हमारा कुछ ऐसा भी नहीं जो हमारे रिलीज़ करने पर टूटे।
- pusher-js
- Laravel Echo
- pusher/pusher-php-server
- pusher-http-node
- Python
- Go
- Ruby
- Java
- Android
- iOS
- Flutter
- Unity
इंस्टॉल की पूरी पंक्ति: npm i pusher-js.
अवसंरचना
दो परतें, और एक क्लस्टर जिसे आप चुनते हैं
डिलीवरी बिलिंग और कॉन्फ़िगरेशन से अलग परत पर चलती है, इसलिए control plane की रुकावट डिलीवरी रोके बिना डैशबोर्ड को कमज़ोर करती है।
अभी चल रहे हैं
- eu1पश्चिमी यूरोप
- eu2मध्य यूरोप
क्लस्टर संदेश पहुँचाने के लिए उच्च-उपलब्ध हैं, presence के लिए नहीं: अगर कोई presence भंडार खो जाए तो presence और उपस्थिति-गणना कमज़ोर पड़ती है जबकि public और private चैनल पहुँचाते रहते हैं। इसे यहाँ पढ़ लेना बाद में पता चलने से बेहतर है।
देखिए एक पब्लिश किस रास्ते जाता है