<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: FZambia</title><link>https://news.ycombinator.com/user?id=FZambia</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 28 Jul 2026 20:03:09 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=FZambia" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by FZambia in "Scaling Redis Pub/Sub across many active channels and nodes"]]></title><description><![CDATA[
<p>Thanks! Our users mostly run Redis or Valkey, so we optimize for them. We also have Dragonflydb in our test suite. But good to know there is one more option which may be used as a drop in replacement for Redis and provide extra properties, guarantees or performance benefits.</p>
]]></description><pubDate>Wed, 01 Jul 2026 18:36:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=48751337</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=48751337</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48751337</guid></item><item><title><![CDATA[Scaling Redis Pub/Sub across many active channels and nodes]]></title><description><![CDATA[
<p>Article URL: <a href="https://centrifugal.dev/blog/2026/06/29/scaling-redis-pub-sub">https://centrifugal.dev/blog/2026/06/29/scaling-redis-pub-sub</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48746582">https://news.ycombinator.com/item?id=48746582</a></p>
<p>Points: 2</p>
<p># Comments: 2</p>
]]></description><pubDate>Wed, 01 Jul 2026 13:38:31 +0000</pubDate><link>https://centrifugal.dev/blog/2026/06/29/scaling-redis-pub-sub</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=48746582</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48746582</guid></item><item><title><![CDATA[Recreating a Two Million Particle World at 30 Hz over WebSocket with Centrifugo]]></title><description><![CDATA[
<p>Article URL: <a href="https://centrifugal.dev/blog/2026/05/21/two-million-particles-on-centrifugo">https://centrifugal.dev/blog/2026/05/21/two-million-particles-on-centrifugo</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48237096">https://news.ycombinator.com/item?id=48237096</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 22 May 2026 15:17:30 +0000</pubDate><link>https://centrifugal.dev/blog/2026/05/21/two-million-particles-on-centrifugo</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=48237096</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48237096</guid></item><item><title><![CDATA[New comment by FZambia in "Postgres LISTEN/NOTIFY does not scale"]]></title><description><![CDATA[
<p>Many here recommend using Kafka or RabbitMQ for real-time notifications. While these tools work well with a relatively stable, limited set of topics, they become costly and inefficient when dealing with a large number of dynamic subscribers, such as in a messaging app where users frequently come and go. In RabbitMQ, queue bindings are resource-intensive, and in Kafka, creating new subscriptions often triggers expensive rebalancing operations. I've seen a use case for a messenger app with 100k concurrent subscribers where developers used RabbitMQ and individual queues for each user. It worked at 60 CPU on Rabbit side during normal situation and during mass reconnections of users (due to some proxy reload in infra) – it took up to several minutes for users to reconnect. I suggested switching to <a href="https://github.com/centrifugal/centrifugo">https://github.com/centrifugal/centrifugo</a> with Redis engine (combines PUB/SUB + Redis streams for individual queues) – and it went to 0.3 CPU on Redis side. Now the system serves about 2 million concurrent connections.</p>
]]></description><pubDate>Fri, 11 Jul 2025 13:09:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=44531732</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=44531732</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44531732</guid></item><item><title><![CDATA[New comment by FZambia in "Postgres LISTEN/NOTIFY does not scale"]]></title><description><![CDATA[
<p>Client SDKs are often a major challenge in systems like these. In my experience, building SDKs on top of asynchronous protocols is particularly tricky. It's generally much easier to make the server-side part reliable. The complexity arises because SDKs must account for a wide range of usage patterns - and you are not controlling the usage.<p>Asynchronous protocols frequently result in callback-based or generator-style APIs on the client side, which are hard to implement safely and intuitively. For example, consider building a real-time SDK for something like NATS. Once a message arrives, you need to invoke a user-defined callback to handle it. At that point, you're faced with a design decision: either call the callback synchronously (which risks blocking the socket reading loop), or do it asynchronously (which raises issues like backpressure handling).<p>Also, SDKs are often developed by different people, each with their own design philosophy and coding style, leading to inconsistency and subtle bugs.<p>So this isn't only about NATS. Just last week, we ran into two critical bugs in two separate Kafka SDKs at work.</p>
]]></description><pubDate>Fri, 11 Jul 2025 12:48:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=44531532</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=44531532</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44531532</guid></item><item><title><![CDATA[New comment by FZambia in "Postgres LISTEN/NOTIFY does not scale"]]></title><description><![CDATA[
<p>For real-time notifications, I believe Nats (<a href="https://nats.io" rel="nofollow">https://nats.io</a>) or Centrifugo (<a href="https://centrifugal.dev" rel="nofollow">https://centrifugal.dev</a>) are worth checking out these days. Messages may be delivered to those systems from PostgreSQL over replication protocol through Kafka as an intermediary buffer. Reliable real-time messaging comes with lots of complexities though, like late message delivery, duplicate message delivery. If the system can be built around at most once guarantees – can help to simplify the design dramatically. Depends on the use case of course, often both at least once and at most once should co-exist in one app.</p>
]]></description><pubDate>Fri, 11 Jul 2025 12:27:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=44531352</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=44531352</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44531352</guid></item><item><title><![CDATA[New comment by FZambia in "Centrifugo v6 released – major update of scalable WebSocket server written in Go"]]></title><description><![CDATA[
<p>Hi everyone!<p>I'd like to share that we've just released Centrifugo v6 - a major update of scalable WebSocket server. The release addresses some usability pain points and adds nice features and more observability.<p>Centrifugo is an open-source standalone server written in Go – <a href="https://github.com/centrifugal/centrifugo">https://github.com/centrifugal/centrifugo</a>. Centrifugo can instantly deliver messages to application online users connected over supported transports (WebSocket, HTTP-streaming, Server-Sent Events (EventSource), GRPC, WebTransport). Centrifugo has the concept of a channel – so it's a user-facing PUB/SUB server. Everything implemented in a language-agnostic way – so Centrifugo can be used in combination with any frontend or backend stack.<p>These days we also provide Centrifugo PRO version – and trying to find a balance to be sustainable.<p>The server is based on the open-source Centrifuge library - <a href="https://github.com/centrifugal/centrifuge">https://github.com/centrifugal/centrifuge</a>, so many improvements mentioned in Centrifugo v6 release blog post (even those for Centrifugo PRO) may be used just as a library in Go application.<p>We provide real-time SDKs for popular client environments – for browser and mobile development – they connect to both Centrifuge library based servers and Centrifugo server.<p>Generally Centrifugal ecosystem provides a good alternative to Socket.IO and cloud services like Pusher.com and Ably.com<p>Will be happy to answer on any questions</p>
]]></description><pubDate>Thu, 16 Jan 2025 10:51:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=42723761</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=42723761</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42723761</guid></item><item><title><![CDATA[Centrifugo v6 released – major update of scalable WebSocket server written in Go]]></title><description><![CDATA[
<p>Article URL: <a href="https://centrifugal.dev/blog/2025/01/16/centrifugo-v6-released">https://centrifugal.dev/blog/2025/01/16/centrifugo-v6-released</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42723631">https://news.ycombinator.com/item?id=42723631</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Thu, 16 Jan 2025 10:29:16 +0000</pubDate><link>https://centrifugal.dev/blog/2025/01/16/centrifugo-v6-released</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=42723631</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42723631</guid></item><item><title><![CDATA[New comment by FZambia in "Server-Sent Events (SSE) Are Underrated"]]></title><description><![CDATA[
<p>Yep, and in addition to that the ephemeral ports problem will araise at some scale with long-lived connections and infrastructure balancer/reverse proxy chain. So it's still required to tune.</p>
]]></description><pubDate>Sun, 29 Dec 2024 20:14:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=42542656</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=42542656</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42542656</guid></item><item><title><![CDATA[New comment by FZambia in "Server-Sent Events (SSE) Are Underrated"]]></title><description><![CDATA[
<p>Wow, it's fascinating how a single HN comment can drive meaningful traffic to a project! I'm the author of Centrifugo, and I appreciate you mentioning it here.<p>Let me share a bit more about Centrifugo transport choices. It’s not just about supporting multiple transports — developers can also choose between bidirectional and unidirectional communication models, depending on their needs.<p>For scenarios where stable subscriptions are required without sending data from the client to the server, Centrifugo seamlessly supports unidirectional transports like SSE, HTTP-streaming, unidirectional gRPC streams, and even unidirectional WebSockets (this may sound kinda funny for many I guess). This means integration is possible without relying on client-side SDKs.<p>However, Centrifugo truly shines in its bidirectional communication capabilities. Its primary transport is WebSocket – with JSON or Protobuf protocols, with SSE/HTTP-streaming fallbacks that are also bidirectional — an approach reminiscent of SockJS, but with more efficient implementation and no mandatory sticky sessions. Sticky sessions is an optimization in Centrifugo, not a requirement. It's worth noting that SSE only supports JSON format, since binary is not possible with it. This is where HTTP-streaming in conjuction with ReadableStream browser API can make much more sense!<p>I believe Centrifugo gives developers the flexibility to choose the transport and communication style that best fits their application's needs. And it scales good out of the box to many nodes – with the help of Redis or Nats brokers. Of course this all comes with limitations every abstraction brings.</p>
]]></description><pubDate>Sun, 29 Dec 2024 19:16:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=42542160</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=42542160</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42542160</guid></item><item><title><![CDATA[Early draft discussion of memory regions for Go language to reduce GC overhead]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/golang/go/discussions/70257">https://github.com/golang/go/discussions/70257</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=42093194">https://news.ycombinator.com/item?id=42093194</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 09 Nov 2024 08:12:11 +0000</pubDate><link>https://github.com/golang/go/discussions/70257</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=42093194</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=42093194</guid></item><item><title><![CDATA[Performance optimizations of WebSocket compression in Go application]]></title><description><![CDATA[
<p>Article URL: <a href="https://centrifugal.dev/blog/2024/08/19/optimizing-websocket-compression">https://centrifugal.dev/blog/2024/08/19/optimizing-websocket-compression</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=41307612">https://news.ycombinator.com/item?id=41307612</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 21 Aug 2024 07:13:52 +0000</pubDate><link>https://centrifugal.dev/blog/2024/08/19/optimizing-websocket-compression</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=41307612</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41307612</guid></item><item><title><![CDATA[Resolving 6 key Jetpack Compose UI testing problems]]></title><description><![CDATA[
<p>Article URL: <a href="https://medium.com/@atiurin/resolving-6-key-jetpack-compose-ui-testing-problems-1c885cd26575">https://medium.com/@atiurin/resolving-6-key-jetpack-compose-ui-testing-problems-1c885cd26575</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=40256780">https://news.ycombinator.com/item?id=40256780</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 04 May 2024 11:21:52 +0000</pubDate><link>https://medium.com/@atiurin/resolving-6-key-jetpack-compose-ui-testing-problems-1c885cd26575</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=40256780</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=40256780</guid></item><item><title><![CDATA[New comment by FZambia in "WebSockets vs. Server-Sent-Events vs. Long-Polling vs. WebRTC vs. WebTransport"]]></title><description><![CDATA[
<p>Hello, I am author of <a href="https://github.com/centrifugal/centrifugo">https://github.com/centrifugal/centrifugo</a>. Our users can choose from WebSocket, EventSource, WebTransport (experimental for now, but will definitely stabilize in the future). WebRTC is out of scope as the main purpose is central server based real-time json/binary messaging, and WebRTC makes things much more complex since it shines for peer-to-peer and rich media communications.<p>What I'd like to add is that Centrifugo also supports HTTP-streaming – not mentioned by the OP – but this is a transport which has advantages over Eventsource - like possibility to send POST body on initial request from web browser (with SSE you can not), it supports binary, and with Readable Streams browser API it's widely supported by modern browsers.<p>Another thing I'd like to mention about Centrifugo - it supports bidirectional WebSocket fallbacks with EventSource and HTTP-streaming, and does this without sticky sessions requirement in distributed scenario. I guess nobody else have this at this point. See <a href="https://centrifugal.dev/blog/2022/07/19/centrifugo-v4-released#modern-websocket-emulation-in-javascript" rel="nofollow">https://centrifugal.dev/blog/2022/07/19/centrifugo-v4-releas...</a>. Which solves one more practical concern. Sticky sessions is an optimization in Centrifugo case, not a requirement.<p>If you are interested in topic, we also have a post about WebSocket scalability - <a href="https://centrifugal.dev/blog/2020/11/12/scaling-websocket" rel="nofollow">https://centrifugal.dev/blog/2020/11/12/scaling-websocket</a> - it covers some design decisions made in Centrifugo.</p>
]]></description><pubDate>Wed, 20 Mar 2024 12:11:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=39765371</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=39765371</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=39765371</guid></item><item><title><![CDATA[Show HN: Scalable instant messaging app with Django (source code and tutorial)]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/centrifugal/grand-chat-tutorial">https://github.com/centrifugal/grand-chat-tutorial</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=38789840">https://news.ycombinator.com/item?id=38789840</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 28 Dec 2023 03:53:32 +0000</pubDate><link>https://github.com/centrifugal/grand-chat-tutorial</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=38789840</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=38789840</guid></item><item><title><![CDATA[Ask HN: WebSocket server transforming channel subscriptions to gRPC streams]]></title><description><![CDATA[
<p>Hello! I'd like to ask your opinion about the idea of a WebSocket server which can handle WebSocket connections, can manage channel subscriptions and transform them to GRPC streams to a custom backend server.<p>Let's say we have a system with 3 participants like this:<p>Client (browser, mobile device, etc.) —> WebSocket server (the subject to implement here) —> Backend server (any custom server in any language with good GRPC support).<p>Then the mechanics is as follows:<p>* Client establishes WebSocket connection with WebSocket server<p>* Client can optionally subscribe to channels. Subscriptions to channels are multiplexed over a single WebSocket connection.<p>* Upon receiving WebSocket connection (or subscription to channel) server can open unidirectional or bidirectional stream with the configured backend which implements GRPC service.<p>* Backend may stream data to connections or to channel subscriptions over established GRPC streams. Data from GRPC streams will be transformed to WebSocket messages and delivered to clients with minimal latency.<p>* Additionally, client can stream data to the backend server (if bidirectional GRPC streams are used). I.e. client sends WebSocket messages, those will be transformed to GRPC messages by WebSocket server and delivered to the application backend.<p>As a result we have a system which allows to quickly create individual streams by using strict GRPC contract but terminating connections over WebSocket transport. So it works well in web browsers. After that no need to write WebSocket protocol, client implementation, handle WebSocket connection. This all will be solved by a suggested WebSocket server and its client SDKs.<p>The mechanics is similar to Websocketd (https://github.com/joewalnes/websocketd), but instead of creating OS processes we create GRPC streams. The difference from grpc-web (https://github.com/grpc/grpc-web) is that we provide streaming capabilities but not exposing GRPC contract to the client - just allowing to stream any data as payload (both binary and text) with some wrappers from our client SDKs side for managing subscriptions. I.e. it's not native GRPC streams on the client side - we expose just Connection/Subscription object to stream in both directions. GRPC streams used only for communication between WebSocket server and backend. To mention - grpc-web does not support all kinds of streaming now (https://github.com/grpc/grpc-web#streaming-support) while proposed solution can. This all should provide a cross-platform way to quickly write streaming apps due to client SDKs and language-agnostic nature of GRPC.<p>I personally see both pros and cons in this scheme (without concentrating on both too much here to keep the question short). I spent some time thinking about this myself, already have some working prototypes – but turned out need more opinions before moving forward with the idea and releasing this, kinda lost in doubts.<p>My main question - whether this seems interesting for someone here? Do you find this useful and see practical value?</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=37130538">https://news.ycombinator.com/item?id=37130538</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 15 Aug 2023 05:30:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=37130538</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=37130538</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=37130538</guid></item><item><title><![CDATA[New comment by FZambia in "Coroutines for Go"]]></title><description><![CDATA[
<p>Wondering whether coroutines may be a step towards async event-based style APIs without allocating read buffers for the entire connection. I.e. a solution to problems discussed in <a href="https://github.com/golang/go/issues/15735">https://github.com/golang/go/issues/15735</a>. Goroutines provide a great way to have non-blocking IO with synchronous code – but when it comes to effective memory management with many connections Go community tend to invent raw epoll implementations: <a href="https://www.freecodecamp.org/news/million-websockets-and-go-cc58418460bb/" rel="nofollow noreferrer">https://www.freecodecamp.org/news/million-websockets-and-go-...</a>. So my question here – can coroutines somehow bring new possibilities in terms of working with network connections?</p>
]]></description><pubDate>Tue, 18 Jul 2023 08:49:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=36769614</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=36769614</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=36769614</guid></item><item><title><![CDATA[Deleted]]></title><description><![CDATA[
<p>-</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=32839682">https://news.ycombinator.com/item?id=32839682</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 14 Sep 2022 16:40:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=32839682</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=32839682</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32839682</guid></item><item><title><![CDATA[New comment by FZambia in "Woe be unto you for using a WebSocket"]]></title><description><![CDATA[
<p>Every time I read criticism of WebSockets it reminds me about WebSuckets (<a href="https://speakerdeck.com/3rdeden/websuckets" rel="nofollow">https://speakerdeck.com/3rdeden/websuckets</a>) presentation :)<p>I am the author of Centrifugo server (<a href="https://github.com/centrifugal/centrifugo" rel="nofollow">https://github.com/centrifugal/centrifugo</a>) - where the main protocol is WebSocket. Agree with many points in post – and if there is a chance to build sth without replacing stateless HTTP to persistent WebSocket (or EventSource, HTTP-streaming, raw TCP etc) – then definitely better to go without persistent connections.<p>But there are many tasks where WebSockets simply shine – by providing a better UX, providing a more interactive content, instant information/feedback. This is important to keep - even if underlying stack is complicated enough. Not every system need to scale to many machines (ex. multiplayer games with limited number of players), corporate apps not really struggle from massive reconnect scenarios (since number of concurrent users is pretty small), and so on. So WebSockets are definitely fine for certain scenarios IMO.<p>I described some problems with WebSockets Centrifugo solves in this blog post - <a href="https://centrifugal.dev/blog/2020/11/12/scaling-websocket" rel="nofollow">https://centrifugal.dev/blog/2020/11/12/scaling-websocket</a>. I don't want to say there are no problems, I want to say that WebSockets are fine in general and we can do some things to deal with things mentioned in the OP's post.</p>
]]></description><pubDate>Wed, 22 Dec 2021 20:40:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=29654846</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=29654846</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=29654846</guid></item><item><title><![CDATA[Centrifugo v3 released – new skills of the real-time messaging server]]></title><description><![CDATA[
<p>Article URL: <a href="https://centrifugal.dev/blog/2021/08/31/hello-centrifugo-v3">https://centrifugal.dev/blog/2021/08/31/hello-centrifugo-v3</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=28379323">https://news.ycombinator.com/item?id=28379323</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 01 Sep 2021 13:05:00 +0000</pubDate><link>https://centrifugal.dev/blog/2021/08/31/hello-centrifugo-v3</link><dc:creator>FZambia</dc:creator><comments>https://news.ycombinator.com/item?id=28379323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=28379323</guid></item></channel></rss>