Code Monkey home page Code Monkey logo

pixelpwnr-server's Introduction

pixelpwnr server

A blazingly fast GPU accelerated pixelflut (video) server in Rust.

Features

  • Blazingly fast pixelflut rendering
  • GPU accelerated
  • Highly concurrent, to support many connections
  • Linux, Windows and macOS
  • Optional binary PX command for reduced bandwidth requirements (enabled by default).

Installation

For installation, Git and Rust cargo are required. Install the latest version of Rust with rustup.

Then, clone and install pixelpwnr-server with:

# Clone the project
git clone https://github.com/timvisee/pixelpwnr-server.git
cd pixelpwnr-server

# Install pixelpwnr server
cargo install --path server -f

# Start using pixelpwnr server
pixelpwnr-server --help

# or run it directly from Cargo
cargo run --release -- --help

Or just build it and invoke the binary directly (Linux/macOS):

# Clone the project
git clone https://github.com/timvisee/pixelpwnr-server.git
cd pixelpwnr-server

# Build the project (release version)
cargo build --release

# Start using pixelpwnr-server
./target/release/pixelpwnr-server --help

The binary PX command

This implementation adds a new command to the protocol.

This type of command is enabled by default, but can be disabled by passing the --no-binary flag to pixelflut-server when running the exectuable.

The command is laid out as follows:

PBxyrgba

where:

  • x and y are Little-Endian u16 values describing the X and Y coordinate of the pixel to set.
  • r, g, b and a are single-byte values describing the R, G, B, and A components of the color to set the pixel to.
  • It is important to note that this command does not end in a newline. Appending a newline simply causes the server to interpret that newline as an empty command (which is fine).

Requirements

  • Rust (MSRV v1.58.1 or higher)
  • Build essentials (Ubuntu package: build-essential)
  • freetype2 development files (Ubuntu package: libfreetype6-dev)

Performance

Here are some points that help with the pixelflut server performance, under heavy load:

  • Use a --release build.
  • Use a CPU with as many cores as possible.
  • Use a fast Ethernet connection, preferably 10Gb/s+.
  • Use a dedicated graphics card.
  • Use a Linux machine.
  • Increase the file descriptor limit (on Linux).
  • Quit as many other running programs.

Relevant projects

License

This project is released under the GNU GPL-3.0 license. Check out the LICENSE file for more information.

pixelpwnr-server's People

Contributors

datdenkikniet avatar dependabot[bot] avatar francisduvivier avatar timvisee avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

pixelpwnr-server's Issues

Saving images to disk

I'm currently looking into different pixelflut implementations, and I like yours a lot. I am missing one thing so far, that lets me tend to the python implementation. I was wondering if this could be implemented.

This python implementation can periodically (i think every second) store the image to disk. This is very useful to me, because I create timelapse-videos after a pixelflut session.

https://github.com/defnull/pixelflut/blob/3458157a242ba1789de7ce308480f4e1cbacc916/pixelflut/pixelflut.py#L188-L190

If there's a possibility to have this in rust as well, I'd be delighted!

Removing double threadpooling

Reposted from timvisee/pixelpwnr-render#1


Right now you're spawning a thread for each cpu core (with thread::spawn(...) and executing a worker on it. Then for each worker you create a tokio cpu_pool with 8 (hardcoded) threads. This means that you will, on an 8 "core" system, spawn 64 threads, meaning a lot of context switching.

The tokio cpu_pool is actually designed to scale Async I/O futures across available CPU cores. Removing the second layer of thread pooling decreases memory consumption by about half and increases throughput (on my laptop, binding to 127.0.0.1 by about 30%

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.