WebSockets as a Service

foony.comのチャットとライブデータを支えるマネージドリアルタイムプラットフォーム。foony.ioですべての開発者に開放されています。

WebSocketサービスは、あなたのサーバーと接続中のすべてのクライアントとの間で常時つながった接続を保ちます。だから更新は次のページ再読み込みを待つことなく、その瞬間に届きます。Foony Realtimeは、地味だけど大事な部分をあなたの代わりにこなします。接続、再接続、ファンアウト、プレゼンス、メッセージ履歴、すべてを1つの小さなSDKの裏側で。

1.5M月間対応プレイヤー数
500M+月間配信メッセージ数
<100msp95ファンアウト目標

ライブで試してみよう

以下のすべては、いまこの瞬間にrealtime.foony.ioの本番サービスに対して動いています。このページを別のタブでもう1つ開いて、2つが互いに反映し合う様子を見てみてください。

プレゼンスとライブカーソル

このページを読んでいるみんながここに現れます。チャンネルのプレゼンスから直接どうぞ。カーソルの位置はエフェメラルメッセージとして届きます。ストレージを完全にスキップする低遅延ティアです。

いま1人マウスを動かしてみて。クリックで手を振れます。

ライブチャット

これはこのページの本物のチャットです。すべてのFoonyページやゲームルームで動いているのと同じ@foony/chatルームです。メッセージは履歴つきの1つのチャンネルで届き、送信はFoonyのサーバーを経由するので、すべてのメッセージがモデレートされます。

最近はまだ誰も発言していません。口火を切りましょう。

データベース同期

これはfoony.comの本番パイプラインです。Foonyのユーザー名を入力すると、その公開Postgres行がサイトのWebSocket経由でストリーミングされ、プレイ中はライブで更新され続けます。ポーリングもAPIエンドポイントも不要です。

検索中…

自作ではなくWebSocketを買う理由

  • メッセージを失わない再接続. ブラウザは絶えず接続を切ります。クライアントは履歴の再生で中断したところから再開できるので、接続が不安定でもメッセージを取りこぼしません。
  • 大規模なファンアウト. 1つのメッセージを10万人の購読者に1秒以内で届けるのは、難しい分散システムの問題です。ここでは、それがまさに仕事そのものです。
  • 面倒な管理なしのプレゼンス. 今この瞬間に誰がオンラインかを確認し、参加・更新・退出イベントに反応できます。独自のハートビートやタイムアウトのロジックを書く必要はありません。
  • キャパシティプランニング不要. WebSocketサーバーはステートフルなので、自分でスケールするにはドレイン、シャーディング、スティッキールーティングが必要です。マネージドサービスなら、それは誰か他の人のポケベルの仕事になります。

Foony Realtimeで手に入るもの

チャンネルとpub/sub

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をたっぷり活用しています。月に約150万人のプレイヤーがfoony.ioを通じておよそ5億件のメッセージをやり取りしていて、マルチプレイヤーゲームは、それらが速く・順番どおり・きっちり1回だけ届いてこそ気持ちよく動くんです。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

実際の動きは、こちらの ゲームでどれでもチェックできます。そして同じインフラを、ダッシュボードとSDKつきでfoony.ioからご利用いただけます。

Foonyのマスコット、バルビー

自分のトラフィックで試してみましょう

無料プランには月900万件のメッセージが含まれています。クレジットカードは不要です。

よくある質問

WebSocketsのサービス提供(as a service)って何ですか?

アプリとユーザーの間の持続的な接続をまるごと引き受けてくれるマネージド型のプラットフォームです。自前のWebSocketサーバーを動かす代わりに、クライアントはサービスに接続し、バックエンドはSDKやRESTを通じてチャンネルにメッセージを送信するだけ。配信・再接続・プレゼンス・履歴はすべてサービスが面倒を見てくれます。

Foony RealtimeはPusherやAblyとどう違うんですか?

チャンネル、プレゼンス、履歴、トークン認証といった同じ基本機能をカバーしていて、Pusherプロトコルにも対応しているので、Pusherのそのまま乗り換えできる代替として使えます。違いは出自と料金です。私たち自身のマルチプレイヤーゲームサイトfoony.comのために作られたもので、無料プランには月900万件のメッセージが含まれています。

乗り換えるにはアプリを書き直さないとダメですか?

たいていは不要です。pusher-jsやLaravel Echoのアプリなら、設定を変えるだけでFoony Realtimeに向けられます。新規プロジェクトでは、 JavaScript・TypeScript向けの@foony/realtime SDK Go SDK、または REST API を、どんな言語からでも使えます。

料金はどのくらいですか?

無料プランには月900万件のメッセージが含まれています。有料プランは月ごとの容量を追加でき、プランを超えた分は100万件あたりで課金されます。最新の数字はこちらでご確認ください: foony.io/pricing.

8 Ball Pool online multiplayer billiards icon