Skip to content
You must be logged in to sponsor cirospaciari

Become a sponsor to Ciro Spaciari

@cirospaciari

Ciro Spaciari

cirospaciari
São Paulo, Brazil

Logo

I'm a software developer searching for support to get more performance to Python, PyPy3 and Ruby, in Web Development.

This year i started a journey to bring a really fast framework for Http, Http2, Http3 and WebSockets to Python and PyPy.

💡 Features

  • WebSocket with pub/sub support
  • Fast and realiable Http/Https
  • Support for Windows, Linux and macOS Silicon & x64
  • Support for PyPy3 and CPython
  • Dynamic URL Routing with Wildcard & Parameter support
  • Sync and Async Function Support
  • Really Simple API
  • Fast and Encrypted TLS 1.3 quicker than most alternative servers can do even unencrypted, cleartext messaging
  • Per-SNI HttpRouter Support
  • Proxy Protocol v2
  • Shared or Dedicated Compression Support
  • Max Backpressure, Max Timeout, Max Payload and Idle Timeout Support
  • Automatic Ping / Pong Support
  • Per Socket Data
  • Middlewares
  • Templates Support (examples with Mako and Jinja2)

🔎 Upcoming Features

  • Fetch like API powered by libuv
  • Async file IO powered by libuv
  • Full asyncio integration with libuv
  • Full Http3 support
  • HPy integration to better support CPython, PyPy and GraalPython
  • Hot Reloading

We created and adapted the full C API from uNetworking/uWebSockets and will integrate libuv powered fetch and file IO, this same C API is used by Bun

Join Github Discussions or Discord for help and have a look at the development progress.

I will use the funds of this sponsorship to get more developers and features in the project, and work full time on bringing socketify to Python, Ruby and more languages.

The problems with japronto and uvloop

Japronto don't get any github updates since 2020 and don't get any src update since 2018, japronto don't support SSL, WebSockets, PyPy3, Windows or macOS Silicon.
I really needed good support + performance, not only performance.
Almost any solution out there have a really big performance hit when using PyPy3 or are not really fast enougth

The Solution

I discover a really fast, small, and well maintained C++ Library called uNetworking/uWebSockets, but no C API available, so we create and adapt the full C API from uNetworking/uWebSockets and will integrate libuv powered fetch and file IO, this same C API is used by Bun

⚡ Benchmarks

HTTP requests per second (Linux x64)

image

WebSocket messages per second (Linux x64)

image

Socketify got almost 900k messages/s with PyPy3 and 860k with Python3 the same performance as Bun that also uses uWebSockets, Falcon at 35k messages/s and Falcon with PyPy3 improves into 56k messages/s, node.js manages 192k.

Runtime versions: PyPy3 7.3.9, Python 3.10.7, node v16.17.0, bun v0.2.2

Framework versions: gunicorn 20.1.0 + uvicorn 0.19.0, socketify alpha, gunicorn 20.1.0 + falcon 3.1.0, robyn 0.18.3

Http tested with oha -c 40 -z 5s http://localhost:8000/ (1 run for warmup and 3 runs average for testing)

WebSocket tested with Bun.sh bench chat-client

Source code in bench

Machine OS: Debian GNU/Linux bookworm/sid x86_64 Kernel: 6.0.0-2-amd64 CPU: Intel i7-7700HQ (8) @ 3.800GHz Memory: 32066MiB

Today socketify has get 30% performance hit due to workarounds between asyncio + libuv, so we will got even faster! See more info in this issue, Python3 and PyPy3 performance will improve when we migrate to HPy. In TechEmPower paintext benchmarks we are the fastest in active web framework for Python/PyPy with more than 2 millions of req/s, followed by Robyn with almost 1.2 million req/s and Falcon using meinheld with about 560k req/s.

@cirospaciari

Work full time on socketify and futures projects!

Current sponsors 1

@wellwelwel
Past sponsors 4
@oauramos
@lee-brown
@xpdeal
Private Sponsor

Featured work

  1. cirospaciari/socketify.py

    Bringing Http/Https and WebSockets High Performance servers for PyPy3 and Python3

    Python 1,444
  2. cirospaciari/socketify.rb

    Bringing WebSockets, Http/Https High Peformance servers for Ruby

    C 6

1% towards 100 monthly sponsors goal

@wellwelwel

wellwelwel sponsors this goal

Select a tier

$ a month

Choose a custom amount.

$5 a month

Select
  • Get a Sponsor badge on your profile

$25 a month

Select
  • Logo or name goes in my project README

$100 a month

Select
  • Logo or name on project website
  • Have your bug reports prioritized

$1,000 a month

Select
  • I'll join your company chat app for help and support