Skip to main content

TCP networking for Python, without the boilerplate.

Project description

SocketFlow

A high-performance, dependency-free TCP networking library for Python with advanced features like compression, event handling, bidirectional keepalive, and more.

Features

  • Zero Dependencies - Uses only Python's standard library
  • Bidirectional Keepalive - Both client and server independently monitor connection health
  • TCP-Level Keepalive - OS-managed keepalive for reliable connection detection
  • Compression - Support for zlib, lzma, and bz2 compression
  • Event-Driven Architecture - Flexible event dispatcher for handling server/client events
  • Blueprint System - Organize your code with reusable blueprints
  • Middleware Support - Add custom middleware to request/response processing
  • Path-Based Routing - Route messages to specific handlers using paths
  • Efficient Buffer Handling - O(N) buffer processing with offset pattern
  • Type Hints - Full type annotations for better IDE support
  • Cross-Platform - Works on Windows, Linux, and macOS

Installation

pip install socketflow

Full documentation available at: https://socketflow.dev/

Or install from source:

git clone https://github.com/ayammaximilian/socketflow.git
cd socketflow
pip install .

Quick Start

Server Example

from socketflow import TcpServer, EventType

# Create server
server = TcpServer(
    host="127.0.0.1",
    port=8080,
    keepalive_interval=30.0,
    keepalive_max_missed=3,
    compress=True
)

# Register event handler
@server.event(EventType.Server.MESSAGE)
def handle_message(data):
    print(f"Received: {data}")
    return "Response"

# Start server
server.start()
server.wait()  # Keep server running

Client Example

from socketflow import TcpClient, EventType

# Create client
client = TcpClient(
    host="127.0.0.1",
    port=8080,
    keepalive_interval=30.0,
    keepalive_max_missed=3,
    compress=True
)

# Connect to server
client.connect()

# Register event handler
@client.event(EventType.Client.MESSAGE)
def handle_message(data):
    print(f"Received: {data}")

# Send message
response = client.send("Hello, Server!", wait_response=True)
print(f"Server response: {response}")

# Disconnect
client.disconnect()

Configuration

Server Options

Parameter Type Default Description
host str "127.0.0.1" Server host address
port int 8080 Server port
compression_type str "zlib" Compression algorithm (zlib, lzma, bz2)
compression_level int 6 Compression level (1-9)
compress bool True Enable compression
keepalive_interval float 30.0 Keepalive interval in seconds
keepalive_max_missed int 3 Max missed keepalives before disconnect
recv_buffer_size int 65536 Receive buffer size
send_buffer_size int 65536 Send buffer size

Client Options

Parameter Type Default Description
host str "127.0.0.1" Server host address
port int 8080 Server port
compression_type str "zlib" Compression algorithm (zlib, lzma, bz2)
compression_level int 6 Compression level (1-9)
compress bool True Enable compression
keepalive_interval float 30.0 Keepalive interval in seconds
keepalive_max_missed int 3 Max missed keepalives before disconnect
connection_timeout float 10.0 Connection timeout in seconds
recv_buffer_size int 65536 Receive buffer size
send_buffer_size int 65536 Send buffer size

API Reference

TcpServer

Methods

  • start() - Start the server
  • stop() - Stop the server and disconnect all clients
  • wait() - Block until server stops
  • start_and_wait() - Start server and block
  • send_client(client_addr, data, path=None, wait_response=False) - Send data to specific client
  • disconnect_client(client_addr) - Disconnect a specific client
  • get_connected_clients() - Get number of connected clients
  • is_connected(client_addr) - Check if client is connected
  • event(event_type) - Decorator to register event handler
  • path(path, middleware=None) - Decorator to register path handler
  • register_blueprint(blueprint) - Register a blueprint

TcpClient

Methods

  • connect() - Connect to server
  • disconnect() - Disconnect from server
  • send(data, path=None, wait_response=False) - Send data to server
  • wait() - Block until client disconnects
  • connect_and_wait() - Connect and block
  • is_connected() - Check if connected
  • event(event_type) - Decorator to register event handler
  • path(path, middleware=None) - Decorator to register path handler
  • register_blueprint(blueprint) - Register a blueprint

Events

Server Events

  • EventType.Server.START - Server started
  • EventType.Server.STOP - Server stopped
  • EventType.Server.CLIENT_CONNECT - Client connected
  • EventType.Server.CLIENT_DISCONNECT - Client disconnected
  • EventType.Server.MESSAGE - Message received from client

Client Events

  • EventType.Client.CONNECT - Connected to server
  • EventType.Client.DISCONNECT - Disconnected from server
  • EventType.Client.MESSAGE - Message received from server

Global Events

  • EventType.Global.ERROR - Error occurred

Path-Based Routing

Send messages to specific handlers using paths:

# Server
@server.path("/user/login")
def handle_login(data):
    # Handle login
    pass

@server.path("/user/register")
def handle_register(data):
    # Handle registration
    pass

# Client
client.send(data, path="/user/login")

Blueprints

Organize your code with blueprints:

from socketflow import Blueprint

user_bp = Blueprint("user")

@user_bp.path("/login")
def login(data):
    pass

@user_bp.path("/register")
def register(data):
    pass

# Register blueprint
server.register_blueprint(user_bp)

Keepalive

SocketFlow implements bidirectional keepalive at two levels:

  1. Application-Level Keepalive - Custom ping/pong messages
  2. TCP-Level Keepalive - OS-managed keepalive probes

Both client and server independently monitor connection health based on their own configurations.

Compression

Support for multiple compression algorithms:

  • zlib - Fast compression, good balance
  • lzma - High compression ratio, slower
  • bz2 - Good compression, moderate speed

Error Handling

SocketFlow provides custom exception types:

  • NotConnected - Connection not established
  • ConnectionTimeout - Connection attempt timed out
  • KeepaliveTimeout - Keepalive timeout
  • CompressionError - Compression/decompression error
  • InvalidData - Invalid message format
  • NoResponse - No response received within timeout
  • MessageHandlerError - Message handling error

License

MIT License - see LICENSE file for details

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Support

Requirements

  • Python 3.7+
  • No external dependencies (uses only standard library)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

socketflow-0.1.4.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

socketflow-0.1.4-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file socketflow-0.1.4.tar.gz.

File metadata

  • Download URL: socketflow-0.1.4.tar.gz
  • Upload date:
  • Size: 19.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for socketflow-0.1.4.tar.gz
Algorithm Hash digest
SHA256 9722a7eef740f8ea99fca505a757c642ea2d90fbfe81a822f7a77bdf9e6d2a9c
MD5 641c0edc50d78b4d72b95a5eca4d9c29
BLAKE2b-256 5755749cd105b836bebd4d99033559e03a9b03d2129870a8168076e7f3ff1cbb

See more details on using hashes here.

File details

Details for the file socketflow-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: socketflow-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for socketflow-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 376175a1f36c0f47e3594a3c87900fab1c0b0ca5441016f3aeda5bdbab485a52
MD5 7cd29e82150c6a0652cd1dfc9fbe47d1
BLAKE2b-256 c48df4da2adc5e5e6224531dfac0a1afd1f97ea692f2fe63218cf8825b8a2da2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page