ODY v0.2.0 'Circe' Arrives - Transforming Performance and Stability

We are thrilled to announce the arrival of ODY v0.2.0, codenamed “Circe”! Continuing our framework’s journey, this release marks a significant milestone. Just as Circe possessed transformative powers, this version brings substantial changes aimed squarely at enhancing the performance and stability of your ODY applications, particularly under high-load conditions. ODY “Circe” is packed with architectural refinements, new features, and critical fixes designed to make the framework faster, more robust, and easier to work with in demanding environments.

Read more →

April 6, 2025

Building a Robust CQRS Implementation with Async Command Processing

Command Query Responsibility Segregation (CQRS) has become a powerful architectural pattern for building scalable, maintainable applications. In this article, we’ll explore a practical implementation of CQRS that incorporates asynchronous command processing using message queues. We’ll see how this approach can solve real-world challenges while maintaining the clean separation that makes CQRS so valuable. Understanding CQRS Fundamentals At its core, CQRS separates operations that modify state (commands) from operations that read state (queries). This separation offers several benefits:

Read more →

April 2, 2025

Resolving Unstable WebSocket Connections in Swoole Multi-Worker Environments

When running a Swoole WebSocket server with multiple worker processes, connections may randomly disconnect or appear disconnected when attempting to broadcast messages. This occurs despite clients maintaining active connections. Typical symptoms include: WebSocket connections work correctly with a single worker (worker_num = 1) With multiple workers, the server reports clients as disconnected shortly after they connect Log entries show: “Client X is no longer connected, skipping” despite the client being active Broadcasting to channels fails intermittently Root Cause The issue stems from Swoole’s process mode and connection dispatch strategy:

Read more →

March 20, 2025

Process vs. Task - What are the key differences?

The main difference between ODY tasks and processes lies in their design, lifecycle management, and use cases, despite their similar ability to handle background jobs. Key Differences Implementation and Management Processes: Low-level and directly mapped to OS processes. Each process has its own memory space and is scheduled by the OS. Your ProcessManager implementation provides a structured way to create and manage these. Tasks: Higher-level abstraction built on top of Swoole’s Worker processes. They’re managed by Swoole’s task system within the server. Memory Isolation

Read more →

March 10, 2025