WebSockets as a Service

Η managed realtime πλατφόρμα πίσω από το chat και τα ζωντανά δεδομένα του foony.com, ανοιχτή σε κάθε developer στο foony.io.

Μια υπηρεσία WebSocket κρατά μια μόνιμη σύνδεση ανοιχτή ανάμεσα στους servers σου και κάθε συνδεδεμένο client, ώστε οι ενημερώσεις να φτάνουν τη στιγμή που συμβαίνουν αντί για το επόμενο refresh της σελίδας. Το Foony Realtime κάνει για σένα τα λιγότερο λαμπερά κομμάτια: συνδέσεις, επανασυνδέσεις, fan-out, presence και ιστορικό μηνυμάτων, όλα πίσω από ένα μικρό SDK.

1.5Mπαίκτες που εξυπηρετούνται μηνιαίως
500M+μηνύματα που παραδίδονται τον μήνα
<100msστόχος p95 fan-out

Δοκίμασέ το ζωντανά

Όλα παρακάτω τρέχουν αυτή τη στιγμή πάνω στην production υπηρεσία στο realtime.foony.io. Άνοιξε αυτή τη σελίδα σε ένα δεύτερο tab και δες τα δύο να καθρεφτίζουν το ένα το άλλο.

Presence και ζωντανοί δείκτες

Όλοι όσοι διαβάζουν αυτή τη σελίδα εμφανίζονται εδώ, κατευθείαν από το presence του channel. Οι θέσεις των δεικτών ταξιδεύουν ως εφήμερα μηνύματα, το επίπεδο χαμηλής καθυστέρησης που παρακάμπτει εντελώς την αποθήκευση.

1 εδώ τώραΚούνησε το ποντίκι σου. Κάνε κλικ για να χαιρετήσεις.

Ζωντανό chat

Αυτό είναι το πραγματικό chat αυτής της σελίδας, το ίδιο δωμάτιο @foony/chat πάνω στο οποίο τρέχει κάθε σελίδα και δωμάτιο παιχνιδιού του Foony. Τα μηνύματα φτάνουν μέσα από ένα channel με ιστορικό, και οι αποστολές περνούν από τον server του Foony ώστε κάθε μήνυμα να ελέγχεται.

Κανείς δεν είπε κάτι πρόσφατα. Σπάσε τον πάγο εσύ.

Συγχρονισμός Βάσης Δεδομένων

Αυτό είναι το production pipeline του foony.com: πληκτρολόγησε οποιοδήποτε όνομα χρήστη Foony και η δημόσια εγγραφή τους στην Postgres ρέει μέσα από το WebSocket του site, και συνεχίζει να ενημερώνεται ζωντανά καθώς παίζουν. Χωρίς polling, χωρίς API endpoint.

Γίνεται αναζήτηση…

Γιατί οι ομάδες αγοράζουν WebSockets αντί να τα φτιάχνουν

  • Επανασυνδέσεις που δεν χάνουν μηνύματα. Οι browsers χάνουν συνδέσεις συνεχώς. Οι clients συνεχίζουν από εκεί που σταμάτησαν με επανάληψη ιστορικού, οπότε μια ασταθής σύνδεση δεν σημαίνει χαμένα μηνύματα.
  • Fan-out σε μεγάλη κλίμακα. Το να παραδώσεις ένα μήνυμα σε εκατό χιλιάδες συνδρομητές σε λιγότερο από ένα δευτερόλεπτο είναι ένα δύσκολο πρόβλημα κατανεμημένων συστημάτων. Εδώ, είναι όλη η δουλειά.
  • Παρουσία χωρίς λογιστικά. Δες ποιος είναι online αυτή τη στιγμή και αντέδρασε σε συμβάντα εισόδου, ενημέρωσης και εξόδου, χωρίς να γράφεις τη δική σου λογική heartbeat και timeout.
  • Χωρίς σχεδιασμό χωρητικότητας. Οι WebSocket servers είναι stateful, οπότε το να τους κλιμακώσεις μόνος σου σημαίνει draining, sharding και sticky routing. Μια managed υπηρεσία το κάνει πρόβλημα κάποιου άλλου.

Τι παίρνεις με το Foony Realtime

Κανάλια και pub/sub

Κάνε fan-out ονομασμένα συμβάντα μέσω WebSocket ή REST σε κανάλια περιορισμένα ανά εφαρμογή (π.χ. chat:lobby) με προβλέψιμη σημασιολογία παράδοσης.

Παρουσία

Παρακολούθησε ποιος είναι online, ανανέωσε αυτόματα τη συμμετοχή και αντέδρασε σε συμβάντα εισόδου, ενημέρωσης και εξόδου.

Ιστορικό μηνυμάτων

Επανάλαβε πρόσφατα μηνύματα από ανθεκτική αποθήκευση ώστε οι clients να ανακτούν καθαρά μετά από επανασυνδέσεις.

Έλεγχος ταυτότητας με token

Δημιούργησε βραχύβια tokens για clients από το backend σου, με δικαιώματα δημοσίευσης, συνδρομής, παρουσίας και ιστορικού σε επίπεδο καναλιού.

Συμβατό με Pusher

Μιλάει το πρωτόκολλο Pusher, οπότε εφαρμογές pusher-js και Laravel Echo συνδέονται με μια αλλαγή ρύθμισης αντί για επανεγγραφή.

Συγχρονισμός Βάσης Δεδομένων

Στείλε αλλαγές της Postgres απευθείας σε συνδεδεμένους clients ως ζωντανά queries, χωρίς polling και χωρίς glue code.

Όλη η ενσωμάτωση είναι λίγες γραμμές:

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 για το chat μας και τις realtime ενημερώσεις βάσης δεδομένων. Περίπου 1,5 εκατομμύριο παίκτες τον μήνα βασίζονται στο foony.io για περίπου 500 εκατομμύρια μηνύματα, και ένα multiplayer παιχνίδι νιώθεται σωστό μόνο όταν αυτά φτάνουν γρήγορα, με τη σειρά και ακριβώς μία φορά. Το Foony δεν θα ήταν εφικτό χωρίς την αξιοπιστία και την οικονομική αποδοτικότητα του foony.io.

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

Δες το στην πράξη σε οποιοδήποτε από τα παιχνίδια μας, και μετά απόκτησε την ίδια υποδομή με ένα dashboard και ένα SDK στο foony.io.

Ο Bulby, η μασκότ του Foony

Δοκίμασέ το στη δική σου κίνηση

Το δωρεάν πλάνο περιλαμβάνει 9 εκατομμύρια μηνύματα τον μήνα. Δεν χρειάζεται πιστωτική κάρτα.

Συχνές ερωτήσεις

Τι είναι το WebSockets as a service;

Μια διαχειριζόμενη πλατφόρμα που αναλαμβάνει τις μόνιμες συνδέσεις ανάμεσα στην εφαρμογή σου και τους χρήστες της. Αντί να τρέχεις τους δικούς σου WebSocket servers, οι clients σου συνδέονται στην υπηρεσία, το backend σου δημοσιεύει μηνύματα σε κανάλια μέσω ενός SDK ή REST, και η υπηρεσία φροντίζει για την παράδοση, τις επανασυνδέσεις, το presence και το ιστορικό.

Πώς διαφέρει το Foony Realtime από το Pusher ή το Ably;

Καλύπτει την ίδια βασική επιφάνεια από κανάλια, presence, ιστορικό και token auth, και μιλάει το πρωτόκολλο Pusher, οπότε λειτουργεί ως άμεση εναλλακτική του Pusher. Η διαφορά είναι στην προέλευση και στην τιμή. Φτιάχτηκε για το foony.com, το δικό μας multiplayer site παιχνιδιών, και το δωρεάν πλάνο περιλαμβάνει 9 εκατομμύρια μηνύματα τον μήνα.

Πρέπει να ξαναγράψω την εφαρμογή μου για να αλλάξω;

Συνήθως όχι. Οι εφαρμογές pusher-js και Laravel Echo μπορούν να δείξουν στο Foony Realtime με μια αλλαγή στη διαμόρφωση. Τα νέα projects χρησιμοποιούν το @foony/realtime SDK για JavaScript και TypeScript, το Go SDK, ή το REST API από οποιαδήποτε γλώσσα.

Πόσο κοστίζει;

Το δωρεάν πλάνο περιλαμβάνει 9 εκατομμύρια μηνύματα τον μήνα. Τα πληρωμένα πλάνα προσθέτουν μηνιαία χωρητικότητα, και η χρήση πάνω από το πλάνο σου χρεώνεται ανά εκατομμύριο μηνύματα. Οι τρέχουσες τιμές είναι στο foony.io/pricing.

8 Ball Pool online multiplayer billiards icon