Notify events

The Notify events enables bi-directional, event-based communication between clients and servers. This allows both sides to send and receive notifications without waiting for a response.

Server-Side Example (Rust)

Let's walk through a basic "Ping-Pong" example, where the client sends a "ping" notification to the server, and the server responds with a "pong" echoing back the same data received.

use axum_socket_io::{Procedure, SocketIo};
use std::net::SocketAddr;

pub async fn handle_socket(mut socket: SocketIo, addr: SocketAddr) {
  println!("A user connected: {addr:#?}");
    while let Ok(ev) = socket.recv().await {
        match ev {
            Procedure::Notify(req) => match req.method() {
                "ping" => socket.notify("pong", req.data()).await.unwrap(),
                _ => {}
            }
            Procedure::Call(req, res, _) => { /* ... */ }
        }
    }
  println!("user disconnected: {addr:#?}");
}

Client-Side Example (JavaScript)

The socket.on(<eventName>) method returns an asynchronous iterator, allowing you to use a for await loop to continuously listen for events as they arrive:

<script type="module">
import { SocketIo } from "https://esm.sh/client-socket-io@0.1.0";
const decodeText = data => new TextDecoder().decode(data);

window.socket = new SocketIo("ws://127.0.0.1:3000/socket");
await socket.connect();

async function onPong() {
    for await (const msg of socket.on("pong")) {
        console.log("[Pong]", decodeText(msg));
    }
}

[onPong].forEach(fn => fn().catch(console.error));
</script>

Sending a Notification

PingPong Example

socket.notify(<eventName>, <data>) sends a notification message to the server without waiting for a response.

  • <eventName>: string: The name of the event you want to send. This string identifies the type of notification (e.g., "ping", "update", etc.),

  • <data>: Uint8Array | string: The data associated with the event. It can either be:

    • A array of byte (Uint8Array).
    • A string, which will be encoded to UTF-8 bytes before being transmitted.