From f0e12069aa27e8ca76d183e06de77975bb772adb Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Wed, 10 Sep 2025 13:41:29 +0200 Subject: [PATCH 01/11] Can I use Ably for audio and video streaming or images and file sharing? --- src/pages/docs/platform/index.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/pages/docs/platform/index.mdx b/src/pages/docs/platform/index.mdx index dabedfdcad..009124f19a 100644 --- a/src/pages/docs/platform/index.mdx +++ b/src/pages/docs/platform/index.mdx @@ -43,6 +43,10 @@ Some of the integrations available with Ably include: Use Ably's products and SDKs to build realtime applications for your clients. They all utilize Ably's reliable platform to ensure that you don't need to worry about managing things such as scaling, latency and data integrity. + + ### Ably Pub/Sub Ably's core [Pub/Sub](/docs/basics) product provides flexible APIs that are feature-rich and powerful. These flexible APIs are the building blocks for crafting any type of realtime experience for your customers. From b81a86515a0b96b08b681c09fee85bcddea045ed Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:06:56 +0200 Subject: [PATCH 02/11] How can I set up different environments in Ably? --- src/pages/docs/platform/account/app/index.mdx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/pages/docs/platform/account/app/index.mdx b/src/pages/docs/platform/account/app/index.mdx index 1bfa5cf921..0c6d393d0e 100644 --- a/src/pages/docs/platform/account/app/index.mdx +++ b/src/pages/docs/platform/account/app/index.mdx @@ -22,6 +22,22 @@ If you have created apps already, your dashboard will look similar to the one sh ![Your apps in the Ably dashboard](../../../../../images/content/screenshots/dash/your-apps.png) +### Environments + +Each Ably app acts as a sandboxed environment, isolated from other apps in your account. This makes it straightforward to set up separate environments for development, staging, and production by creating dedicated apps for each. + +For example, if you're building a product called "chat-app", you could create: + +- `chat-app-production` for your live production environment +- `chat-app-staging` for pre-production testing +- `chat-app-development` for ongoing development work + +This approach provides complete isolation between environments, ensuring that development activities don't interfere with production traffic. An alternative approach for complete resource isolation, consider using separate Ably accounts for development and production environments. This ensures development activities cannot impact production resources under any circumstances. + + + ## App overview Your app dashboard provides the following tabs for monitoring and configuring your app settings: From c2c84c5a4c96a6040551cf5f3b9e58f4834fb8bf Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:52:01 +0200 Subject: [PATCH 03/11] Is there a limit to the length of the ClientId or Channel name? --- src/pages/docs/platform/pricing/limits.mdx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/pages/docs/platform/pricing/limits.mdx b/src/pages/docs/platform/pricing/limits.mdx index c8c59d8226..0ce19741a6 100644 --- a/src/pages/docs/platform/pricing/limits.mdx +++ b/src/pages/docs/platform/pricing/limits.mdx @@ -88,6 +88,15 @@ Channel limits relate to the number, rate and membership of [channels](/docs/cha | **Presence members per channel with [server-side batching](/docs/messages/batch#server-side) enabled**

*the maximum number of clients that can be simultaneously present on a channel when server-side batching is enabled*

| 200 | 5,000 | 10,000 | 20,000 | | **Objects per channel**

*the maximum number of objects that can be stored on a channel*

| 100 | 100 | 100 | 100 | + +## Client identifier limits
+ +There is no limit to the length of a `clientId`, however, the clientId is counted as part of the message size and will contribute towards the total message size limits for your package. + +## Channel identifier limits + +There is no strict limit to the length of channel names. Channel names must comply with the [channel naming restrictions](/docs/channels#use) regarding allowed characters and format. + ## Connection limits Connection limits relate to the realtime [connections](/docs/connect) made to Ably from your account. From 7b768d7556b01ee704862840b8a4072702fed2d3 Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Thu, 11 Sep 2025 08:44:26 +0200 Subject: [PATCH 04/11] How can I subscribe to messages using REST only SDKs? --- src/pages/docs/basics/index.mdx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pages/docs/basics/index.mdx b/src/pages/docs/basics/index.mdx index 1b10b522ff..e9dae6a6b2 100644 --- a/src/pages/docs/basics/index.mdx +++ b/src/pages/docs/basics/index.mdx @@ -65,6 +65,16 @@ The REST interface communicates with Ably using the HTTP protocol and is effecti * issue tokens on behalf of other realtime clients * retrieve persisted messages, presence history and application usage statistics +#### Implementing realtime features with REST-only SDKs + +If you're working with REST-only SDKs or environments where realtime connections aren't available, you can still implement realtime functionality using these alternatives: + +1. **[MQTT protocol adapter](/docs/protocols/mqtt)** - Translates between MQTT and Ably's protocol, ideal for IoT devices and constrained environments +2. **[PubNub protocol adapter](/docs/protocols/pubnub)** - Use existing PubNub SDKs with Ably for easy migration +3. **[Ably queues](/docs/platform/integrations/queues)** - Consume realtime data server-side using AMQP or STOMP protocols + +These solutions enable you to subscribe to and process realtime messages without maintaining persistent connections through Ably SDKs. + ### Realtime interface The realtime interface is implemented using an Ably-defined protocol, primarily over WebSockets. It enables clients to establish and maintain a persistent connection to Ably. The realtime interface extends the functionality of the REST interface and is most commonly used client-side. It is used to: From ad82abf20bb197e5cc6358ab61f3603b342c6904 Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Thu, 11 Sep 2025 08:50:07 +0200 Subject: [PATCH 05/11] CSP Rejection to internet-up.ably-realtime.com/is-the-internet-up.txt --- src/pages/docs/platform/errors/codes.mdx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/pages/docs/platform/errors/codes.mdx b/src/pages/docs/platform/errors/codes.mdx index d820806a99..3bde65a0fa 100644 --- a/src/pages/docs/platform/errors/codes.mdx +++ b/src/pages/docs/platform/errors/codes.mdx @@ -599,6 +599,16 @@ The request will be automatically retried by the SDK. **Resolution:** If the client never connects to the [primary or fallback endpoints](https://faqs.ably.com/routing-around-network-and-dns-issues), check any firewall rules that may be blocking access to Ably's [endpoints](https://faqs.ably.com/if-i-need-to-whitelist-ablys-servers-from-a-firewall-which-ports-ips-and/or-domains-should-i-add). +**Network connectivity detection:** Ably SDKs use `https://internet-up.ably-realtime.com/is-the-internet-up.txt` to test network connectivity when connection attempts fail. If CSP policies block this endpoint, ensure your Content Security Policy includes: + + +``` +Content-Security-Policy: connect-src https://internet-up.ably-realtime.com; script-src https://internet-up.ably-realtime.com +``` + + +Blocking this resource causes clients to assume they're offline and prevents fallback host usage. + ## 80016: Operation on superseded connection This error occurs when a browser [connection](/docs/connect/states#connection-states) upgrades from an HTTP (Comet) transport to WebSockets. It is logged by the client library when operations are performed on the older transport. From 93730918f378aa06e52637b308daf1cea54292d8 Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Thu, 11 Sep 2025 08:59:34 +0200 Subject: [PATCH 06/11] Are the Message and Data Transfer Limits Enforced Separately? --- src/pages/docs/platform/pricing/limits.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/docs/platform/pricing/limits.mdx b/src/pages/docs/platform/pricing/limits.mdx index 0ce19741a6..dcf81f3f42 100644 --- a/src/pages/docs/platform/pricing/limits.mdx +++ b/src/pages/docs/platform/pricing/limits.mdx @@ -60,7 +60,7 @@ Application limits relate to the quantity of resources that can be created per a ## Message limits -Message limits relate to the number, rate and bandwidth of messages consumed across you account. +Message limits relate to the number, rate and bandwidth of messages consumed across you account. Message count limits and data transfer (bandwidth) limits are enforced separately - exceeding one does not affect the other. | Message limit | Free | Standard | Pro | Enterprise | | ------------- | ---- | -------- | --- | ---------- | From 61165a85169f2b98d0259f0bae7811ee85554b10 Mon Sep 17 00:00:00 2001 From: Francis Roberts <111994975+franrob-projects@users.noreply.github.com> Date: Thu, 11 Sep 2025 09:10:13 +0200 Subject: [PATCH 07/11] Should I reduce the REST publish timeout? --- src/pages/docs/pub-sub/index.mdx | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/pages/docs/pub-sub/index.mdx b/src/pages/docs/pub-sub/index.mdx index e7a9eaeae2..d071ffdd28 100644 --- a/src/pages/docs/pub-sub/index.mdx +++ b/src/pages/docs/pub-sub/index.mdx @@ -437,6 +437,28 @@ if err := channel.Publish(context.Background(), "example", "message data"); err ``` +### REST publish timeouts + +REST publish operations have a default 10-second timeout. While you may consider reducing this timeout for faster failure feedback, be aware that this can create problems: + +Short timeouts can be problematic for the following reasons: + +- Most requests that exceed short timeouts, for example < 1s, still succeed with normal latency. +- Retrying typically doesn't speed up message delivery and creates additional system load. +- During high load or scaling operations, retry storms can worsen performance. +- You'll miss important error notifications (rate limits, channel limits) if requests timeout prematurely. + +The default 10-second timeout is designed to: + +- Account for channel activation latency in multi-region deployments. +- Handle network and processing queue variations. +- Provide reliable error reporting for legitimate failures. + +When to consider timeout adjustments: + +- Use `httpOpenTimeout` (default 4s) for connection establishment issues, not `httpRequestTimeout` for the full request. +- Only reduce request timeouts if you have robust retry logic and can handle increased system load. +