diff --git a/404.html b/404.html index bbc334176..4d3c55b7d 100644 --- a/404.html +++ b/404.html @@ -15,7 +15,7 @@ - +
diff --git a/assets/js/9ff4038f.73b81756.js b/assets/js/9ff4038f.4a9bfed7.js similarity index 54% rename from assets/js/9ff4038f.73b81756.js rename to assets/js/9ff4038f.4a9bfed7.js index 37fe9f61e..bdeac6c40 100644 --- a/assets/js/9ff4038f.73b81756.js +++ b/assets/js/9ff4038f.4a9bfed7.js @@ -1 +1 @@ -"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[2353],{4590:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var i=t(85893),o=t(11151);const a={id:"introduction",title:"Centrifugo introduction"},r=void 0,s={id:"getting-started/introduction",title:"Centrifugo introduction",description:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server.",source:"@site/docs/getting-started/introduction.md",sourceDirName:"getting-started",slug:"/getting-started/introduction",permalink:"/docs/getting-started/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/getting-started/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Centrifugo introduction"},sidebar:"Introduction",next:{title:"Join community",permalink:"/docs/getting-started/community"}},c={},l=[{value:"Background and motivation",id:"background-and-motivation",level:2}];function d(e){const n={admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{src:"/img/logo_animated_no_accel.svg",width:"100px",height:"100px",align:"left",style:{marginRight:"10px",float:"left"}}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc., in combination with any backend and frontend. It is well suited for modern architectures and allows decoupling of business logic from the real-time transport layer."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo scales horizontally, allowing multiple Centrifugo nodes in a cluster to load balance client connections. A message published to any Centrifugo node in this setup will be delivered to online subscribers connected to other nodes. This is achieved through an integration with a set of high-performance PUB/SUB brokers capable of handling millions of concurrent channels."}),"\n",(0,i.jsx)(n.p,{children:"Several official SDKs for browser and mobile development wrap the bidirectional client-to-server protocol, offering a straightforward API for real-time subscriptions multiplexed over a single connection. These SDKs handle reconnects, manage ping-pong, timeouts, and deal with other complexities of working with real-time connections. Additionally, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency."}),"\n",(0,i.jsx)(n.admonition,{title:"Real-time?",type:"info",children:(0,i.jsx)(n.p,{children:"By real-time, we refer to a soft real-time system. This means there are no strict timing constraints. Due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed."})}),"\n",(0,i.jsx)(n.h2,{id:"background-and-motivation",children:"Background and motivation"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(72297).Z+"",width:"2000",height:"1068"})}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo was born more than a decade ago to help applications whose server-side code was written in a language or framework lacking built-in concurrency support. In such cases, managing persistent connections can be a real headache, usually resolvable only by altering the technology stack and investing time in developing a production-ready solution."}),"\n",(0,i.jsx)(n.p,{children:"For instance, frameworks like Django, Flask, Yii, Laravel, Ruby on Rails, and others offer limited or suboptimal support for handling numerous persistent connections for real-time messaging tasks."}),"\n",(0,i.jsx)(n.p,{children:"Here, Centrifugo provides a straightforward and non-obtrusive way to introduce real-time updates and manage many persistent connections without radical changes in the application backend architecture. Developers can continue to work on the application's backend using their preferred language or framework, and keep the existing architecture. Just let Centrifugo deal with persistent connections and be the real-time messaging transport layer."}),"\n",(0,i.jsx)(n.p,{children:"These days, Centrifugo offers advanced and unique features that can significantly simplify a developer's workload and save months (if not years) of development time, even if the application's backend is built with an asynchronous concurrent language or framework. The documentation uncovers features step by step."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo fits well with modern architectures and can serve as a universal real-time component, regardless of the application's technology stack. It stands as a powerful self-hosted alternative to cloud solutions like Pusher, Ably, or PubNub."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},72297:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/bg_cat-4454fbaae0446c3b1964e06821dd378b.jpg"},11151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>r});var i=t(67294);const o={},a=i.createContext(o);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file +"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[2353],{4590:(e,n,t)=>{t.r(n),t.d(n,{assets:()=>c,contentTitle:()=>r,default:()=>u,frontMatter:()=>a,metadata:()=>s,toc:()=>l});var i=t(85893),o=t(11151);const a={id:"introduction",title:"Centrifugo introduction"},r=void 0,s={id:"getting-started/introduction",title:"Centrifugo introduction",description:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server.",source:"@site/docs/getting-started/introduction.md",sourceDirName:"getting-started",slug:"/getting-started/introduction",permalink:"/docs/getting-started/introduction",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/getting-started/introduction.md",tags:[],version:"current",frontMatter:{id:"introduction",title:"Centrifugo introduction"},sidebar:"Introduction",next:{title:"Join community",permalink:"/docs/getting-started/community"}},c={},l=[{value:"Background and motivation",id:"background-and-motivation",level:2}];function d(e){const n={admonition:"admonition",h2:"h2",img:"img",p:"p",...(0,o.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)("img",{src:"/img/logo_animated_no_accel.svg",width:"100px",height:"100px",align:"left",style:{marginRight:"10px",float:"left"}}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is an open-source real-time messaging server. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, SSE/EventSource, WebTransport, GRPC). Centrifugo is built around channel concept \u2013 clients subscribe to channels to receive publications \u2013 so it's a user-facing PUB/SUB server."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc., in combination with any backend and frontend. It is well suited for modern architectures and allows decoupling of business logic from the real-time transport layer."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo scales horizontally, allowing multiple Centrifugo nodes in a cluster to load balance client connections. A message published to any Centrifugo node in this setup will be delivered to online subscribers connected to other nodes. This is achieved through an integration with a set of high-performance PUB/SUB brokers capable of handling millions of concurrent channels."}),"\n",(0,i.jsx)(n.p,{children:"Several official SDKs for browser and mobile development wrap the bidirectional client-to-server protocol, offering a straightforward API for real-time subscriptions multiplexed over a single connection. These SDKs handle reconnects, manage ping-pong, timeouts, and deal with other complexities of working with real-time connections. Additionally, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency."}),"\n",(0,i.jsx)(n.admonition,{title:"Real-time?",type:"info",children:(0,i.jsx)(n.p,{children:"By real-time, we refer to a soft real-time system. This means there are no strict latency timing constraints. Centrifugo does its best to minimize delivery delays, but due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed."})}),"\n",(0,i.jsx)(n.h2,{id:"background-and-motivation",children:"Background and motivation"}),"\n",(0,i.jsx)(n.p,{children:(0,i.jsx)(n.img,{src:t(72297).Z+"",width:"2000",height:"1068"})}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo was born more than a decade ago to help applications whose server-side code was written in a language or framework lacking built-in concurrency support. In such cases, managing persistent connections can be a real headache, usually resolvable only by altering the technology stack and investing time in developing a production-ready solution."}),"\n",(0,i.jsx)(n.p,{children:"For instance, frameworks like Django, Flask, Yii, Laravel, Ruby on Rails, and others offer limited or suboptimal support for handling numerous persistent connections for real-time messaging tasks."}),"\n",(0,i.jsx)(n.p,{children:"Here, Centrifugo provides a straightforward and non-obtrusive way to introduce real-time updates and manage many persistent connections without radical changes in the application backend architecture. Developers can continue to work on the application's backend using their preferred language or framework, and keep the existing architecture. Just let Centrifugo deal with persistent connections and be the real-time messaging transport layer."}),"\n",(0,i.jsx)(n.p,{children:"These days, Centrifugo offers advanced and unique features that can significantly simplify a developer's workload and save months (if not years) of development time, even if the application's backend is built with an asynchronous concurrent language or framework. The documentation uncovers features step by step."}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo fits well with modern architectures and can serve as a universal real-time component, regardless of the application's technology stack. It stands as a powerful self-hosted alternative to cloud solutions like Pusher, Ably, or PubNub."})]})}function u(e={}){const{wrapper:n}={...(0,o.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},72297:(e,n,t)=>{t.d(n,{Z:()=>i});const i=t.p+"assets/images/bg_cat-4454fbaae0446c3b1964e06821dd378b.jpg"},11151:(e,n,t)=>{t.d(n,{Z:()=>s,a:()=>r});var i=t(67294);const o={},a=i.createContext(o);function r(e){const n=i.useContext(a);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function s(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(o):e.components||o:r(e.components),i.createElement(a.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ee78c395.54ae4f2b.js b/assets/js/ee78c395.54ae4f2b.js deleted file mode 100644 index 0526ae459..000000000 --- a/assets/js/ee78c395.54ae4f2b.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[5484],{88341:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>u,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var i=r(85893),s=r(11151);const o={id:"overview",title:"Centrifugo PRO \u267b\ufe0f",sidebar_label:"Centrifugo PRO"},t=void 0,a={id:"pro/overview",title:"Centrifugo PRO \u267b\ufe0f",description:"Centrifugo PRO is the enhanced version of Centrifugo offered by Centrifugal Labs LTD under a commercial license. It's packed with a unique set of features designed to fit requirements of corporate and enterprise environments, decrease costs at scale, and benefit from additional features such as push notifications support, real-time analytics, and so on. We have leveraged our extensive experience to build Centrifugo PRO, ensuring its extra powers are practical and ready for production workloads.",source:"@site/docs/pro/overview.md",sourceDirName:"pro",slug:"/pro/overview",permalink:"/docs/pro/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/pro/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Centrifugo PRO \u267b\ufe0f",sidebar_label:"Centrifugo PRO"},sidebar:"Pro",next:{title:"Install and run PRO version",permalink:"/docs/pro/install_and_run"}},c={},l=[{value:"Features",id:"features",level:2},{value:"Pricing",id:"pricing",level:2},{value:"Try for free in sandbox mode",id:"try-for-free-in-sandbox-mode",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Centrifugo PRO is the enhanced version of Centrifugo offered by Centrifugal Labs LTD under a commercial license. It's packed with a unique set of features designed to fit requirements of corporate and enterprise environments, decrease costs at scale, and benefit from additional features such as push notifications support, real-time analytics, and so on. We have leveraged our extensive experience to build Centrifugo PRO, ensuring its extra powers are practical and ready for production workloads."}),"\n",(0,i.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo PRO is packed with the following features:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Everything from Centrifugo OSS"}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd0d ",(0,i.jsx)(n.a,{href:"/docs/pro/tracing",children:"Channel and user tracing"})," allows watching client protocol frames in channel or per user ID in real time."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcb9 ",(0,i.jsx)(n.a,{href:"/docs/pro/analytics",children:"Real-time analytics with ClickHouse"})," for a great system observability, reporting and trending."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udee1\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/rate_limiting",children:"Operation rate limits"})," to protect server from the real-time API misusing and frontend bugs."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd25 ",(0,i.jsx)(n.a,{href:"/docs/pro/push_notifications",children:"Push notification API"})," to manage device tokens and send mobile and browser push notifications."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd10 ",(0,i.jsx)(n.a,{href:"/docs/pro/admin_idp_auth",children:"SSO for admin UI"})," using OpenID Connect (OIDC) protocol."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcda ",(0,i.jsx)(n.a,{href:"/docs/pro/namespace_engines",children:"Per-namespace engines"})," to configure various PUB/SUB brokers and presence managers on namespace level."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udfe2 ",(0,i.jsx)(n.a,{href:"/docs/pro/user_status",children:"User status API"})," feature allows understanding activity state for a list of users."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd0c ",(0,i.jsx)(n.a,{href:"/docs/pro/connections",children:"Connections API"})," to query, filter and inspect active connections."]}),"\n",(0,i.jsxs)(n.li,{children:["\u270b ",(0,i.jsx)(n.a,{href:"/docs/pro/user_block",children:"User blocking API"})," to block/unblock abusive users by ID."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\uded1 ",(0,i.jsx)(n.a,{href:"/docs/pro/token_revocation",children:"JWT revoking and invalidation API"})," to revoke tokens by ID and invalidate user's tokens based on issue time."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd14 ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_state_events",children:"Channel state events"})," to be notified on the backend about channel ",(0,i.jsx)(n.code,{children:"occupied"})," and ",(0,i.jsx)(n.code,{children:"vacated"})," events."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\udd63 ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_cache_empty",children:"Channel cache empty events"})," to react on cache misses in channels with cache recovery mode."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcaa ",(0,i.jsx)(n.a,{href:"/docs/pro/capabilities",children:"Channel capabilities"})," for controlling channel permissions per connection or per subscription."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcdc ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_patterns",children:"Channel patterns"})," allow defining channel configuration like HTTP routes with parameters."]}),"\n",(0,i.jsxs)(n.li,{children:["\u270d\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/cel_expressions",children:"Channel CEL expressions"})," to write custom efficient permission rules for channel operations."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udddc\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/delta_at_most_once",children:"Delta compression for at most once"})," scenario."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\ude80 ",(0,i.jsx)(n.a,{href:"/docs/pro/performance",children:"Faster performance"})," to reduce resource usage on server side."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd2e ",(0,i.jsx)(n.a,{href:"/docs/pro/engine_optimizations",children:"Engine load optimizations"})," with singleflight technique and shared position synchronization."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83c\udf54 ",(0,i.jsx)(n.a,{href:"/docs/pro/client_message_batching",children:"Message batching control"})," for advanced tuning of client connection write behaviour."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\uddd0 ",(0,i.jsx)(n.a,{href:"/docs/pro/observability_enhancements",children:"Observability enhancements"})," for additional more granular system state insights."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\udeb5 ",(0,i.jsx)(n.a,{href:"/docs/pro/process_stats",children:"CPU and RSS memory"})," usage stats of Centrifugo nodes in admin UI."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Also, explore our ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/centrifugal/projects/3/views/1",children:"Centrifugo PRO planned features"})," board for a concise overview of upcoming features which are currently in progress and enhancements planned for a future."]}),"\n",(0,i.jsx)(n.h2,{id:"pricing",children:"Pricing"}),"\n",(0,i.jsxs)(n.p,{children:["Centrifugo PRO requires a license key to run. The pricing information for the license key is available upon request over ",(0,i.jsx)(n.code,{children:"sales@centrifugal.dev"})," e-mail. Our services are exclusively available to corporate and business clients at this time. We would be happy to learn more about your real-time challenges and how Centrifugo can help you address them. Don't hesitate to ask for an online meeting to discuss the use case in-person."]}),"\n",(0,i.jsx)(n.h2,{id:"try-for-free-in-sandbox-mode",children:"Try for free in sandbox mode"}),"\n",(0,i.jsx)(n.p,{children:"You can try out Centrifugo PRO for free. When you start Centrifugo PRO without license key then it's running in a sandbox mode. Sandbox mode limits the usage of Centrifigo PRO in several ways. For example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Centrifugo handles up to 20 concurrent connections"}),"\n",(0,i.jsx)(n.li,{children:"up to 2 server nodes supported"}),"\n",(0,i.jsx)(n.li,{children:"up to 5 API requests per second allowed"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"This mode should be enough for development and trying out PRO features, but must not be used in production environment."}),"\n",(0,i.jsx)(n.admonition,{title:"Centrifugo PRO license agreement",type:"caution",children:(0,i.jsxs)(n.p,{children:["Centrifugo PRO is distributed by Centrifugal Labs LTD under ",(0,i.jsx)(n.a,{href:"/license",children:"commercial license"})," which is different from OSS version. By downloading Centrifugo PRO you automatically accept commercial license terms."]})})]})}function u(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>t});var i=r(67294);const s={},o=i.createContext(s);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/ee78c395.c29681d3.js b/assets/js/ee78c395.c29681d3.js new file mode 100644 index 000000000..8c7bfaed3 --- /dev/null +++ b/assets/js/ee78c395.c29681d3.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcentrifugal_dev=self.webpackChunkcentrifugal_dev||[]).push([[5484],{88341:(e,n,r)=>{r.r(n),r.d(n,{assets:()=>c,contentTitle:()=>t,default:()=>h,frontMatter:()=>o,metadata:()=>a,toc:()=>l});var i=r(85893),s=r(11151);const o={id:"overview",title:"Centrifugo PRO \u267b\ufe0f",sidebar_label:"Centrifugo PRO"},t=void 0,a={id:"pro/overview",title:"Centrifugo PRO \u267b\ufe0f",description:"Centrifugo PRO is the enhanced version of Centrifugo offered by Centrifugal Labs LTD under a commercial license. It's packed with a unique set of features designed to fit requirements of corporate and enterprise environments, decrease costs at scale, and benefit from additional features such as push notifications support, real-time analytics, and so on. We have leveraged our extensive experience to build Centrifugo PRO, ensuring its extra powers are practical and ready for production workloads.",source:"@site/docs/pro/overview.md",sourceDirName:"pro",slug:"/pro/overview",permalink:"/docs/pro/overview",draft:!1,unlisted:!1,editUrl:"https://github.com/centrifugal/centrifugal.dev/edit/main/docs/pro/overview.md",tags:[],version:"current",frontMatter:{id:"overview",title:"Centrifugo PRO \u267b\ufe0f",sidebar_label:"Centrifugo PRO"},sidebar:"Pro",next:{title:"Install and run PRO version",permalink:"/docs/pro/install_and_run"}},c={},l=[{value:"Features",id:"features",level:2},{value:"Pricing",id:"pricing",level:2},{value:"Try for free in sandbox mode",id:"try-for-free-in-sandbox-mode",level:2}];function d(e){const n={a:"a",admonition:"admonition",code:"code",h2:"h2",li:"li",p:"p",strong:"strong",ul:"ul",...(0,s.a)(),...e.components};return(0,i.jsxs)(i.Fragment,{children:[(0,i.jsx)(n.p,{children:"Centrifugo PRO is the enhanced version of Centrifugo offered by Centrifugal Labs LTD under a commercial license. It's packed with a unique set of features designed to fit requirements of corporate and enterprise environments, decrease costs at scale, and benefit from additional features such as push notifications support, real-time analytics, and so on. We have leveraged our extensive experience to build Centrifugo PRO, ensuring its extra powers are practical and ready for production workloads."}),"\n",(0,i.jsx)(n.h2,{id:"features",children:"Features"}),"\n",(0,i.jsx)(n.p,{children:"Centrifugo PRO is packed with the following features:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Everything from Centrifugo OSS"}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd0d ",(0,i.jsx)(n.a,{href:"/docs/pro/tracing",children:"Channel and user tracing"})," allows watching client protocol frames in channel or per user ID in real time."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcb9 ",(0,i.jsx)(n.a,{href:"/docs/pro/analytics",children:"Real-time analytics with ClickHouse"})," for a great system observability, reporting and trending."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udee1\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/rate_limiting",children:"Operation rate limits"})," to protect server from the real-time API misusing and frontend bugs."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd25 ",(0,i.jsx)(n.a,{href:"/docs/pro/push_notifications",children:"Push notification API"})," to manage device tokens and send mobile and browser push notifications."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd10 ",(0,i.jsx)(n.a,{href:"/docs/pro/admin_idp_auth",children:"SSO for admin UI"})," using OpenID Connect (OIDC) protocol."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcda ",(0,i.jsx)(n.a,{href:"/docs/pro/namespace_engines",children:"Per-namespace engines"})," to configure various PUB/SUB brokers and presence managers on namespace level."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udfe2 ",(0,i.jsx)(n.a,{href:"/docs/pro/user_status",children:"User status API"})," feature allows understanding activity state for a list of users."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd0c ",(0,i.jsx)(n.a,{href:"/docs/pro/connections",children:"Connections API"})," to query, filter and inspect active connections."]}),"\n",(0,i.jsxs)(n.li,{children:["\u270b ",(0,i.jsx)(n.a,{href:"/docs/pro/user_block",children:"User blocking API"})," to block/unblock abusive users by ID."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\uded1 ",(0,i.jsx)(n.a,{href:"/docs/pro/token_revocation",children:"JWT revoking and invalidation API"})," to revoke tokens by ID and invalidate user's tokens based on issue time."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd14 ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_state_events",children:"Channel state events"})," to be notified on the backend about channel ",(0,i.jsx)(n.code,{children:"occupied"})," and ",(0,i.jsx)(n.code,{children:"vacated"})," events."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\udd63 ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_cache_empty",children:"Channel cache empty events"})," to react on cache misses in channels with cache recovery mode."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcaa ",(0,i.jsx)(n.a,{href:"/docs/pro/capabilities",children:"Channel capabilities"})," for controlling channel permissions per connection or per subscription."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udcdc ",(0,i.jsx)(n.a,{href:"/docs/pro/channel_patterns",children:"Channel patterns"})," allow defining channel configuration like HTTP routes with parameters."]}),"\n",(0,i.jsxs)(n.li,{children:["\u270d\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/cel_expressions",children:"Channel CEL expressions"})," to write custom efficient permission rules for channel operations."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udddc\ufe0f ",(0,i.jsx)(n.a,{href:"/docs/pro/delta_at_most_once",children:"Delta compression for at most once"})," scenario."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\ude80 ",(0,i.jsx)(n.a,{href:"/docs/pro/performance",children:"Faster performance"})," to reduce resource usage on server side."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83d\udd2e ",(0,i.jsx)(n.a,{href:"/docs/pro/engine_optimizations",children:"Engine load optimizations"})," with singleflight technique and shared position synchronization."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83c\udf54 ",(0,i.jsx)(n.a,{href:"/docs/pro/client_message_batching",children:"Message batching control"})," for advanced tuning of client connection write behaviour."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\uddd0 ",(0,i.jsx)(n.a,{href:"/docs/pro/observability_enhancements",children:"Observability enhancements"})," for additional more granular system state insights."]}),"\n",(0,i.jsxs)(n.li,{children:["\ud83e\udeb5 ",(0,i.jsx)(n.a,{href:"/docs/pro/process_stats",children:"CPU and RSS memory"})," usage stats of Centrifugo nodes in admin UI."]}),"\n"]}),"\n",(0,i.jsxs)(n.p,{children:["Also, explore our ",(0,i.jsx)(n.a,{href:"https://github.com/orgs/centrifugal/projects/3/views/1",children:"Centrifugo PRO planned features"})," board for a concise overview of upcoming features which are currently in progress and enhancements planned for a future."]}),"\n",(0,i.jsx)(n.h2,{id:"pricing",children:"Pricing"}),"\n",(0,i.jsxs)(n.p,{children:["Centrifugo PRO requires a license key to run. The pricing information for the license key is available upon request over ",(0,i.jsx)(n.code,{children:"sales@centrifugal.dev"})," e-mail. Or just ",(0,i.jsx)(n.strong,{children:(0,i.jsx)(n.a,{href:"https://9g88gms5zxw.typeform.com/to/yQgOFL43",children:"fill the form"})}),", and we will write you back with the details."]}),"\n",(0,i.jsx)(n.p,{children:"Our services are exclusively available to corporate and business clients at this time. We would be happy to learn more about your real-time challenges and how Centrifugo can help you address them. Don't hesitate to ask for an online meeting to discuss the use case in-person."}),"\n",(0,i.jsx)(n.h2,{id:"try-for-free-in-sandbox-mode",children:"Try for free in sandbox mode"}),"\n",(0,i.jsx)(n.p,{children:"You can try out Centrifugo PRO for free. When you start Centrifugo PRO without license key then it's running in a sandbox mode. Sandbox mode limits the usage of Centrifigo PRO in several ways. For example:"}),"\n",(0,i.jsxs)(n.ul,{children:["\n",(0,i.jsx)(n.li,{children:"Centrifugo handles up to 20 concurrent connections"}),"\n",(0,i.jsx)(n.li,{children:"up to 2 server nodes supported"}),"\n",(0,i.jsx)(n.li,{children:"up to 5 API requests per second allowed"}),"\n"]}),"\n",(0,i.jsx)(n.p,{children:"This mode should be enough for development and trying out PRO features, but must not be used in production environment."}),"\n",(0,i.jsx)(n.admonition,{title:"Centrifugo PRO license agreement",type:"caution",children:(0,i.jsxs)(n.p,{children:["Centrifugo PRO is distributed by Centrifugal Labs LTD under ",(0,i.jsx)(n.a,{href:"/license",children:"commercial license"})," which is different from OSS version. By downloading Centrifugo PRO you automatically accept commercial license terms."]})})]})}function h(e={}){const{wrapper:n}={...(0,s.a)(),...e.components};return n?(0,i.jsx)(n,{...e,children:(0,i.jsx)(d,{...e})}):d(e)}},11151:(e,n,r)=>{r.d(n,{Z:()=>a,a:()=>t});var i=r(67294);const s={},o=i.createContext(s);function t(e){const n=i.useContext(o);return i.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function a(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:t(e.components),i.createElement(o.Provider,{value:n},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.2c44cb7d.js b/assets/js/runtime~main.399d7db9.js similarity index 85% rename from assets/js/runtime~main.2c44cb7d.js rename to assets/js/runtime~main.399d7db9.js index 82e083c6d..733848180 100644 --- a/assets/js/runtime~main.2c44cb7d.js +++ b/assets/js/runtime~main.399d7db9.js @@ -1 +1 @@ -(()=>{"use strict";var e,c,d,a,f,b={},t={};function r(e){var c=t[e];if(void 0!==c)return c.exports;var d=t[e]={exports:{}};return b[e].call(d.exports,d,d.exports,r),d.exports}r.m=b,e=[],r.O=(c,d,a,f)=>{if(!d){var b=1/0;for(i=0;iCentrifugo is language-agnostic and can be used to build chat apps, live comments, multiplayer games, real-time data visualizations, collaborative tools, etc., in combination with any backend and frontend. It is well suited for modern architectures and allows decoupling of business logic from the real-time transport layer.
Centrifugo scales horizontally, allowing multiple Centrifugo nodes in a cluster to load balance client connections. A message published to any Centrifugo node in this setup will be delivered to online subscribers connected to other nodes. This is achieved through an integration with a set of high-performance PUB/SUB brokers capable of handling millions of concurrent channels.
Several official SDKs for browser and mobile development wrap the bidirectional client-to-server protocol, offering a straightforward API for real-time subscriptions multiplexed over a single connection. These SDKs handle reconnects, manage ping-pong, timeouts, and deal with other complexities of working with real-time connections. Additionally, Centrifugo supports a unidirectional approach for simple use cases with no SDK dependency.
-By real-time, we refer to a soft real-time system. This means there are no strict timing constraints. Due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed.
By real-time, we refer to a soft real-time system. This means there are no strict latency timing constraints. Centrifugo does its best to minimize delivery delays, but due to factors like network latencies, garbage collection cycles, and so on, those can't be guaranteed.
Centrifugo was born more than a decade ago to help applications whose server-side code was written in a language or framework lacking built-in concurrency support. In such cases, managing persistent connections can be a real headache, usually resolvable only by altering the technology stack and investing time in developing a production-ready solution.
diff --git a/docs/getting-started/migration_v4.html b/docs/getting-started/migration_v4.html index 2948976f7..d83b26564 100644 --- a/docs/getting-started/migration_v4.html +++ b/docs/getting-started/migration_v4.html @@ -15,7 +15,7 @@ - + diff --git a/docs/getting-started/migration_v5.html b/docs/getting-started/migration_v5.html index 3081ff4b0..04098f630 100644 --- a/docs/getting-started/migration_v5.html +++ b/docs/getting-started/migration_v5.html @@ -15,7 +15,7 @@ - + diff --git a/docs/getting-started/quickstart.html b/docs/getting-started/quickstart.html index 8fdaf8440..d9bdac0f8 100644 --- a/docs/getting-started/quickstart.html +++ b/docs/getting-started/quickstart.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/admin_idp_auth.html b/docs/pro/admin_idp_auth.html index 9faac3a80..3d38187f5 100644 --- a/docs/pro/admin_idp_auth.html +++ b/docs/pro/admin_idp_auth.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/analytics.html b/docs/pro/analytics.html index 8e72a5cb1..9b5f11fa6 100644 --- a/docs/pro/analytics.html +++ b/docs/pro/analytics.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/capabilities.html b/docs/pro/capabilities.html index 160010b9a..21ec4ae52 100644 --- a/docs/pro/capabilities.html +++ b/docs/pro/capabilities.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/cel_expressions.html b/docs/pro/cel_expressions.html index e29fb6f94..b979d81d1 100644 --- a/docs/pro/cel_expressions.html +++ b/docs/pro/cel_expressions.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/channel_cache_empty.html b/docs/pro/channel_cache_empty.html index 382b25201..31de4ed48 100644 --- a/docs/pro/channel_cache_empty.html +++ b/docs/pro/channel_cache_empty.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/channel_patterns.html b/docs/pro/channel_patterns.html index b2e271fbd..2e6ded93d 100644 --- a/docs/pro/channel_patterns.html +++ b/docs/pro/channel_patterns.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/channel_state_events.html b/docs/pro/channel_state_events.html index 84cb5f8e8..1fcdd6066 100644 --- a/docs/pro/channel_state_events.html +++ b/docs/pro/channel_state_events.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/client_message_batching.html b/docs/pro/client_message_batching.html index 935966c9f..3b32cb4ff 100644 --- a/docs/pro/client_message_batching.html +++ b/docs/pro/client_message_batching.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/connections.html b/docs/pro/connections.html index 85adb1e03..418bc924b 100644 --- a/docs/pro/connections.html +++ b/docs/pro/connections.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/delta_at_most_once.html b/docs/pro/delta_at_most_once.html index 0e273bfe2..3bb5ece3d 100644 --- a/docs/pro/delta_at_most_once.html +++ b/docs/pro/delta_at_most_once.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/distributed_rate_limit.html b/docs/pro/distributed_rate_limit.html index 38ccba203..b6a83f4fe 100644 --- a/docs/pro/distributed_rate_limit.html +++ b/docs/pro/distributed_rate_limit.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/engine_optimizations.html b/docs/pro/engine_optimizations.html index a52262ffc..72013db8a 100644 --- a/docs/pro/engine_optimizations.html +++ b/docs/pro/engine_optimizations.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/install_and_run.html b/docs/pro/install_and_run.html index cd067a432..5be9360b0 100644 --- a/docs/pro/install_and_run.html +++ b/docs/pro/install_and_run.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/namespace_engines.html b/docs/pro/namespace_engines.html index a92aba594..91d7f7e97 100644 --- a/docs/pro/namespace_engines.html +++ b/docs/pro/namespace_engines.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/observability_enhancements.html b/docs/pro/observability_enhancements.html index ffd7faa5a..f5a4f3df6 100644 --- a/docs/pro/observability_enhancements.html +++ b/docs/pro/observability_enhancements.html @@ -15,7 +15,7 @@ - + diff --git a/docs/pro/overview.html b/docs/pro/overview.html index bf1a3c5f5..ce36f180d 100644 --- a/docs/pro/overview.html +++ b/docs/pro/overview.html @@ -15,7 +15,7 @@ - + @@ -48,7 +48,8 @@Also, explore our Centrifugo PRO planned features board for a concise overview of upcoming features which are currently in progress and enhancements planned for a future.
Centrifugo PRO requires a license key to run. The pricing information for the license key is available upon request over sales@centrifugal.dev
e-mail. Our services are exclusively available to corporate and business clients at this time. We would be happy to learn more about your real-time challenges and how Centrifugo can help you address them. Don't hesitate to ask for an online meeting to discuss the use case in-person.
Centrifugo PRO requires a license key to run. The pricing information for the license key is available upon request over sales@centrifugal.dev
e-mail. Or just fill the form, and we will write you back with the details.
Our services are exclusively available to corporate and business clients at this time. We would be happy to learn more about your real-time challenges and how Centrifugo can help you address them. Don't hesitate to ask for an online meeting to discuss the use case in-person.
You can try out Centrifugo PRO for free. When you start Centrifugo PRO without license key then it's running in a sandbox mode. Sandbox mode limits the usage of Centrifigo PRO in several ways. For example: