WebSocket 即服务

支撑 foony.com 聊天和实时数据的托管实时平台,在 foony.io 向每位开发者开放。

WebSocket 服务会在你的服务器和每个连接的客户端之间保持一条常开的连接,所以更新一发生就会到达,而不用等到下次刷新页面。Foony Realtime 帮你搞定那些不起眼的活儿:连接、重连、消息分发、在线状态和消息历史,全都藏在一个小巧的 SDK 后面。

1.5M每月服务的玩家数
500M+每月发送的消息数
<100msp95 分发目标

来实时体验一下

下面的一切现在就跑在 realtime.foony.io 的生产服务上。用另一个标签页打开这个页面,看看两边怎么互相同步。

在线状态与实时光标

每个正在看这个页面的人都会出现在这里,直接来自频道的在线状态。光标位置以临时消息的形式传输,这是完全跳过存储的低延迟通道。

当前 1 人在线移动你的鼠标,点击来打个招呼。

实时聊天

这就是这个页面真正的聊天,和每个 Foony 页面、每个游戏房间用的是同一个 @foony/chat 房间。消息通过一个带历史的频道到达,发送会经过 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 来实现聊天和实时数据库更新。每月约有 150 万玩家依赖 foony.io 传递大约 5 亿条消息,而一款多人游戏只有在这些消息快速、按序、且不重不漏地送达时才玩起来顺手。没有 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 吉祥物 Bulby

用你自己的流量试试看

免费套餐每月包含 900 万条消息。无需信用卡。

常见问题

什么是 WebSockets 即服务?

这是一个托管平台,负责维护你的应用和用户之间的持久连接。你不用自己运行 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 万条消息。付费套餐会增加每月额度,超出套餐的用量按每百万条消息计费。最新数据请见 foony.io/pricing.

8 Ball Pool online multiplayer billiards icon