| Crates.io | ibrahim-tcp |
| lib.rs | ibrahim-tcp |
| version | 1.0.0 |
| created_at | 2025-11-05 08:42:55.308364+00 |
| updated_at | 2025-11-05 08:42:55.308364+00 |
| description | High-performance lightweight TCP protocol with reliability, compression, and fault tolerance |
| homepage | |
| repository | https://gitlab.com/yasirdevloper9/ibrahim |
| max_upload_size | |
| id | 1917596 |
| size | 24,025 |
Ibrahim TCP is a lightweight, high-performance TCP protocol library written in pure Rust.
It provides a reliable, fault-tolerant transport with compression, retries, and acknowledgements โ perfect for real-time systems like multiplayer games, telemetry, or distributed nodes.
You can use it to:
power multiplayer game servers
handle state replication between distributed nodes
typical Ibrahim system has three layers:
Client (Game) โ Ibrahim Gateway Server โ Shard / Zone Servers โ Matchmaking / State Service
Each client connects via TCP to a Gateway Server.
The Gateway broadcasts game events (ticks, health, bullets, etc.).
Each Zone Server syncs world state with other nodes via the same protocol.
All communications use Packet (compressed + reliable). *
Each client sends packets with a unique id.
The server broadcasts messages to all clients.
Each packet is compressed and tracked.
Missing ACKs trigger automatic retransmission.
Compression = LZ4 (fastest ratio for real-time text data).
๐งฐ License
GPLv3 ยฉ Muhammad Yasir Gujjar Use it freely for open-source, educational, or commercial projects.
[dependencies] ibrahim-protocol = "1.0" tokio = { version = "1", features = ["full"] }
use ibrahim_tcp::{Packet, Server};
use tokio::{time::{sleep, Duration}};
#[tokio::main]
async fn main() -> std::io::Result<()> {
let server = Server::new("0.0.0.0:4000").await?;
println!("[GameServer] Listening on 0.0.0.0:4000");
let mut tick = 0;
loop {
// simulate world tick update
let pkt = Packet::new(tick, format!("world_tick={} player_updates=42", tick), true);
server.broadcast(&pkt).await;
tick += 1;
sleep(Duration::from_millis(50)).await; // ~20 ticks/sec
}
}
use ibrahim_tcp::Client;
use std::env;
#[tokio::main]
async fn main() -> std::io::Result<()> {
let args: Vec<String> = env::args().collect();
let name = args.get(1).cloned().unwrap_or("Player".into());
let client = Client::new("127.0.0.1:4000");
client.run(&name).await
}
Imagine multiple โzonesโ (maps) in your game:
zone-1 runs on 127.0.0.1:4000
zone-2 runs on 127.0.0.1:4001
Each zone can send replicated updates to others.
use ibrahim_tcp::{Packet, Client, Server};
use tokio::time::{sleep, Duration};
#[tokio::main]
async fn main() -> std::io::Result<()> {
// zone-1 server
let server = Server::new("127.0.0.1:4000").await?;
// zone-2 client connects to zone-1
let client = Client::new("127.0.0.1:4000");
tokio::spawn(async move {
client.run("zone-2").await.unwrap();
});
println!("[Zone-1] Syncing with Zone-2...");
let mut tick = 0u64;
loop {
let pkt = Packet::new(tick, format!("sync_state: zone=1 tick={}", tick), true);
server.broadcast(&pkt).await;
tick += 1;
sleep(Duration::from_millis(100)).await;
}
}
Youโll see:
[Zone-1] Syncing with Zone-2... [zone-2] recv: sync_state: zone=1 tick=10
Thatโs a distributed zone replication โ perfect for large multiplayer backends.
If a client doesnโt acknowledge a message within 3s, ibrahim-tcp automatically resends it.
You can confirm ACKs via logs (just enable debug!() logs in your code):
let pkt = Packet::new(1001, "fire bullet id=392".into(), true);
client.send(pkt).await?; // handled via retry system
You can trust delivery even during lag or packet loss.
For an FPS or RTS: Data Type Recommended Channel Notes Player input Packet::new(..., compressed=false) No need to compress small control packets Entity state Compressed, reliable packets Auto retries ensure sync Chat / Text Compressed packets Human-readable Heartbeat / Ping Lightweight text packet For latency display
Example heartbeat:
let ping = Packet::new(999, "ping".to_string(), false);
server.broadcast(&ping).await;
๐ Scaling Up
For massive multiplayer:
Deploy multiple Server instances (zones).
Use Redis or NATS to distribute updates between servers.
Each client connects to its nearest zone.
Ibrahim ensures ordered, compressed, reliable state across them. ' [Client] -- TCP --> [Zone Server] -- TCP --> [Global State Sync] ' ๐งช Testing Locally
Start the main server
cargo run --example server
Start multiple clients
cargo run --example client Yasir
cargo run --example client Bob
Observe real-time tick updates from the server.
Optional: connect with telnet or curl to test low-level protocol:
telnet 127.0.0.1 4000
Youโll see binary/text framed messages (compressed).
. [nasir] connected . [nasir] recv: health=90 . [nasir] recv: health=70 . [nasir] recv: health=60 . [nasir] recv: health=14 . [nasir] recv: revive=+15 . [nasir] recv: ammo=2
โโโโโโโโโโโโโโโโ
โ Master Serverโ
โโโโโโโโฌโโโโโโโโ
โ
โโโโโโโโโโโโโดโโโโโโโโโโโโ
โ โ
โโโผโโโโโโโโโโโ โโโโโโโโผโโโโโโโโโ
โ Zone A โ โ Zone B โ
โ (Europe) โ โ (America) โ
โโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโโ
โ โ
Clients A Clients B
Each line is an ibrahim-tcp connection. Packets are compressed, ordered, and retried automatically.
This crate compiles cleanly on Rust 1.80+, no warnings, fully async.
To verify:
cargo check