Convert Figma logo to code with AI

ratchetphp logoRatchet

Asynchronous WebSocket server

6,244
727
6,244
202

Top Related Projects

6,244

Asynchronous WebSocket server

Event-driven, non-blocking I/O with PHP.

11,091

An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols.

4,217

A non-blocking concurrency framework for PHP applications. 🐘

Websockets for Laravel. Done right.

Quick Overview

Ratchet is a PHP WebSocket library that allows developers to create real-time, bidirectional applications. It provides a set of tools and components for building scalable WebSocket servers and clients, enabling seamless communication between web browsers and PHP applications.

Pros

  • Easy to use and integrate with existing PHP applications
  • Supports both WebSocket and HTTP long polling
  • Scalable architecture suitable for high-performance applications
  • Extensive documentation and active community support

Cons

  • Requires PHP with the libevent extension for optimal performance
  • Limited built-in features compared to some other WebSocket libraries
  • May require additional configuration for deployment in certain environments
  • Learning curve for developers new to WebSocket programming

Code Examples

  1. Creating a simple WebSocket server:
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
use MyApp\Chat;

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();
  1. Implementing a basic Chat class:
namespace MyApp;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class Chat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
        echo "New connection! ({$conn->resourceId})\n";
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($from !== $client) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
        echo "Connection {$conn->resourceId} has disconnected\n";
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        echo "An error has occurred: {$e->getMessage()}\n";
        $conn->close();
    }
}
  1. Sending messages to specific clients:
public function onMessage(ConnectionInterface $from, $msg) {
    $data = json_decode($msg, true);
    if (isset($data['recipient'])) {
        foreach ($this->clients as $client) {
            if ($client->resourceId == $data['recipient']) {
                $client->send($data['message']);
                break;
            }
        }
    }
}

Getting Started

  1. Install Ratchet using Composer:

    composer require cboden/ratchet
    
  2. Create a new PHP file (e.g., server.php) and implement your WebSocket server:

    <?php
    require 'vendor/autoload.php';
    
    use Ratchet\Server\IoServer;
    use Ratchet\Http\HttpServer;
    use Ratchet\WebSocket\WsServer;
    use MyApp\Chat;
    
    $server = IoServer::factory(
        new HttpServer(
            new WsServer(
                new Chat()
            )
        ),
        8080
    );
    
    $server->run();
    
  3. Run the server:

    php server.php
    
  4. Connect to the WebSocket server from your client-side application using JavaScript:

    const socket = new WebSocket('ws://localhost:8080');
    socket.onmessage = function(event) {
        console.log('Received:', event.data);
    };
    socket.send('Hello, WebSocket!');
    

Competitor Comparisons

6,244

Asynchronous WebSocket server

Pros of Ratchet

  • Well-established and mature WebSocket library for PHP
  • Supports multiple protocols (WebSocket, WAMP, Socket.io)
  • Extensive documentation and community support

Cons of Ratchet

  • No significant cons to mention, as both repositories refer to the same project
  • The comparison is not applicable in this case

Code Comparison

Since both repositories refer to the same project, there is no code comparison to be made. Here's a sample of Ratchet usage:

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new Chat()
        )
    ),
    8080
);

$server->run();

Additional Notes

The repositories ratchetphp/Ratchet and ratchetphp/Ratchet> appear to be the same project. The second repository name might be a typo or formatting error. Ratchet is a popular PHP WebSocket library that allows developers to create real-time, bidirectional applications. It provides a robust foundation for building scalable, event-driven applications using PHP.

For accurate and up-to-date information about Ratchet, it's recommended to refer to the official repository at https://github.com/ratchetphp/Ratchet.

Event-driven, non-blocking I/O with PHP.

Pros of ReactPHP

  • More versatile and can be used for various types of applications beyond WebSockets
  • Offers a wider range of components for building asynchronous PHP applications
  • Has a larger and more active community, resulting in more frequent updates and contributions

Cons of ReactPHP

  • Steeper learning curve due to its more comprehensive nature
  • Requires more setup and configuration for WebSocket-specific applications
  • May have higher overhead for simple WebSocket implementations

Code Comparison

ReactPHP (Event Loop):

$loop = React\EventLoop\Factory::create();
$loop->addTimer(1, function () {
    echo "Hello after 1 second\n";
});
$loop->run();

Ratchet (WebSocket Server):

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MyWebSocketHandler()
        )
    ),
    8080
);
$server->run();

Summary

ReactPHP is a more comprehensive asynchronous PHP framework, offering greater flexibility and a wider range of components. It's suitable for various types of applications, including but not limited to WebSockets. Ratchet, on the other hand, is specifically designed for WebSocket applications, making it easier to set up and use for this particular purpose. The choice between the two depends on the specific requirements of your project and your familiarity with asynchronous programming in PHP.

11,091

An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols.

Pros of Workerman

  • Better performance and scalability, handling more concurrent connections
  • Supports multiple protocols (HTTP, WebSocket, TCP, UDP) out of the box
  • Simpler API and easier to get started with for beginners

Cons of Workerman

  • Less extensive documentation and community support compared to Ratchet
  • Fewer built-in features for advanced WebSocket functionality
  • Limited compatibility with some PHP frameworks and libraries

Code Comparison

Ratchet example:

$server = IoServer::factory(
    new HttpServer(
        new WsServer(
            new MyWebSocketHandler()
        )
    ),
    8080
);
$server->run();

Workerman example:

$worker = new Worker("websocket://0.0.0.0:8080");
$worker->onMessage = function($connection, $data) {
    $connection->send("Hello, $data!");
};
Worker::runAll();

Both Ratchet and Workerman are PHP libraries for building real-time applications and WebSocket servers. Workerman offers better performance and multi-protocol support, making it suitable for high-concurrency scenarios. However, Ratchet has more extensive documentation and community support, which can be beneficial for developers seeking resources and assistance. The code examples demonstrate that Workerman has a slightly simpler API, while Ratchet provides a more structured approach to handling WebSocket connections.

4,217

A non-blocking concurrency framework for PHP applications. 🐘

Pros of Amp

  • Supports both synchronous and asynchronous programming models
  • Offers a more comprehensive ecosystem with additional libraries for HTTP, MySQL, Redis, etc.
  • Generally provides better performance for high-concurrency scenarios

Cons of Amp

  • Steeper learning curve, especially for developers new to asynchronous programming
  • Less straightforward implementation for simple WebSocket servers compared to Ratchet
  • Smaller community and fewer readily available examples

Code Comparison

Ratchet WebSocket server:

$server = IoServer::factory(
    new HttpServer(new WsServer(new MyWebSocketHandler())),
    8080
);
$server->run();

Amp WebSocket server:

Loop::run(function () {
    $server = Websocket\Server::listen("0.0.0.0:8080");
    while ($connection = yield $server->accept()) {
        Amp\asyncCoroutine(function () use ($connection) {
            // Handle connection
        });
    }
});

Both Ratchet and Amp are powerful PHP libraries for building real-time applications, but they cater to different use cases and developer preferences. Ratchet is more focused on WebSocket functionality and is easier to get started with, while Amp provides a broader set of tools for asynchronous programming and can handle more complex scenarios.

Websockets for Laravel. Done right.

Pros of Laravel WebSockets

  • Seamless integration with Laravel ecosystem and Pusher API
  • Built-in dashboard for monitoring WebSocket connections and events
  • Easy to set up and configure within Laravel applications

Cons of Laravel WebSockets

  • Limited to Laravel framework, not suitable for non-Laravel projects
  • May have higher resource usage compared to Ratchet for large-scale applications

Code Comparison

Laravel WebSockets:

use BeyondCode\LaravelWebSockets\WebSocketsServiceProvider;

class WebSocketsController extends Controller
{
    public function connect(ConnectionInterface $connection)
    {
        // Handle WebSocket connection
    }
}

Ratchet:

use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

class WebSocketServer implements MessageComponentInterface
{
    public function onOpen(ConnectionInterface $conn)
    {
        // Handle WebSocket connection
    }
}

Summary

Laravel WebSockets is tailored for Laravel applications, offering easy integration and a user-friendly dashboard. It's ideal for developers already working within the Laravel ecosystem. Ratchet, on the other hand, is a more versatile and lightweight solution that can be used in various PHP projects, not limited to Laravel. The choice between the two depends on the specific project requirements, framework preferences, and scalability needs.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Ratchet

GitHub Actions Autobahn Testsuite Latest Stable Version

A PHP library for asynchronously serving WebSockets. Build up your application through simple interfaces and re-use your application without changing any of its code just by combining different components.

Reviving Ratchet!

We're currently aiming to revive Ratchet to get it up to date with the latest versions and use this as a starting point for bigger updates to come. We need your help to achieve this goal, see ticket #1054 for ways to help out. ❤️

Requirements

Shell access is required and root access is recommended. To avoid proxy/firewall blockage it's recommended WebSockets are requested on port 80 or 443 (SSL), which requires root access. In order to do this, along with your sync web stack, you can either use a reverse proxy or two separate machines. You can find more details in the server conf docs.

Documentation

User and API documentation is available on Ratchet's website: http://socketo.me

See https://github.com/cboden/Ratchet-examples for some out-of-the-box working demos using Ratchet.

Need help? Have a question? Want to provide feedback? Write a message on the Google Groups Mailing List.


A quick example

<?php
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;

    // Make sure composer dependencies have been installed
    require __DIR__ . '/vendor/autoload.php';

/**
 * chat.php
 * Send any incoming messages to all connected clients (except sender)
 */
class MyChat implements MessageComponentInterface {
    protected $clients;

    public function __construct() {
        $this->clients = new \SplObjectStorage;
    }

    public function onOpen(ConnectionInterface $conn) {
        $this->clients->attach($conn);
    }

    public function onMessage(ConnectionInterface $from, $msg) {
        foreach ($this->clients as $client) {
            if ($from != $client) {
                $client->send($msg);
            }
        }
    }

    public function onClose(ConnectionInterface $conn) {
        $this->clients->detach($conn);
    }

    public function onError(ConnectionInterface $conn, \Exception $e) {
        $conn->close();
    }
}

    // Run the server application through the WebSocket protocol on port 8080
    $app = new Ratchet\App('localhost', 8080);
    $app->route('/chat', new MyChat, array('*'));
    $app->route('/echo', new Ratchet\Server\EchoServer, array('*'));
    $app->run();
$ php chat.php
    // Then some JavaScript in the browser:
    var conn = new WebSocket('ws://localhost:8080/echo');
    conn.onmessage = function(e) { console.log(e.data); };
    conn.onopen = function(e) { conn.send('Hello Me!'); };