stateroom VS falcon

Compare stateroom vs falcon and see what are their differences.

stateroom

A lightweight framework for building WebSocket-based application backends. (by drifting-in-space)
InfluxDB - Power Real-Time Data Analytics at Scale
Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.
www.influxdata.com
featured
SaaSHub - Software Alternatives and Reviews
SaaSHub helps you find the best software and product alternatives
www.saashub.com
featured
stateroom falcon
4 2
134 924
1.5% 0.5%
5.0 7.8
1 day ago about 1 month ago
Rust Jupyter Notebook
MIT License GNU General Public License v3.0 or later
The number of mentions indicates the total number of mentions that we've tracked plus the number of user suggested alternatives.
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.

stateroom

Posts with mentions or reviews of stateroom. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-03-20.
  • Hey Rustaceans! Got a question? Ask here (12/2023)!
    14 projects | /r/rust | 20 Mar 2023
  • Launch HN: Drifting in Space (YC W22) – A server process for every user
    5 projects | news.ycombinator.com | 28 Feb 2022
    In the case of containers it gets tricky because of how it interacts with the scheduler (e.g. if a node is idle but has a bunch of paused containers that could be unpaused at any time, the scheduler has to decide how to proceed), but I love the concept. It's something I've thought a bit about in a world where the server can be compiled to WebAssembly, because it's imaginable to suspend it and serialize the memory state so that it can be sent off to storage somewhere and pulled out when the next request comes in. This was actually part of the motivation behind a library I wrote called Stateroom (https://github.com/drifting-in-space/stateroom), which creates a stateful WebSocket server as a WebAssembly module, but I haven't yet implemented the ability to freeze the state of the module between requests.
  • Use Phoenix Channels
    1 project | news.ycombinator.com | 4 Aug 2021
    > "just drop it in and it just works" for self hosted websocket systems

    I was also been underwhelmed by options in this area, so I've been working on a Rust library called Jamsocket[1]. The idea is that all you need to do is implement a trait, overload the functions for the events you want to handle (new connection, message, etc.) and deploy it.

    I still need to work on production aspects of it, but it's in a state where you can play with it for local development, so I figured I'd share it here in case any Rust developers want to tinker with it.

    [1] https://github.com/jamsocket/jamsocket

falcon

Posts with mentions or reviews of falcon. We have used some of these posts to build our list of alternatives and similar projects. The last one was on 2023-10-24.
  • Goodbye, Node.js Buffer
    15 projects | news.ycombinator.com | 24 Oct 2023
  • Launch HN: Drifting in Space (YC W22) – A server process for every user
    5 projects | news.ycombinator.com | 28 Feb 2022
    Good questions!

    > Why do you need one process per user? / Wouldn't this "event loop" actually be more efficient that one user/process, as there would be less context switching cost from the OS?

    We're particularly interested in apps that are often CPU-bound, so a traditional event-loop would be blocked for long periods of time. A typical solution is to put the work into a thread, so there would still be a context switch, albeit a smaller one.

    The process-per-user approach makes the most sense when a significant amount of the data used by each user does not overlap with other users. VS Code (in client/server mode) is a good example of this -- the overhead of siloing each process is relatively low compared to the benefits it gives. We think more data-heavy apps will make the same trade-offs.

    > Can I just keep a map of (connection, thread_id) on my server, and spawn one thread per user on my own server?

    If you don't have to scale beyond one server, this approach works fine, but it makes scaling horizontally complicated because you suddenly can't just use a plain old load balancer. It's not just about routing requests to the right server; deciding which server to run the threads on becomes complicated because you ideally want to decide based on the server load of each. We started going down this path, realized we'd end up re-inventing Kubernetes, so decided to embrace it instead.

    > Could I just load up my server with many cores, and give each user a SQLite database which runs each query in its own thread? This way a multi GB database would not be loaded into RAM, the query would filter it down to a result set.

    If, for a particular use case, it's economical to keep the data ready in a database that supports the query pattern users will make, it's probably not a good fit for a session-lived backend. In database terms, where our architecture makes sense is when you need to create an index on a dataset (or subset of a dataset) during the runtime of an application. For example, if you have thousands of large parquet files in blob storage and you want a user to be able to load one and run [Falcon](https://github.com/vega/falcon)-type analysis on it.

What are some alternatives?

When comparing stateroom and falcon you can also consider the following projects:

spawner - Session backend orchestrator for ambitious browser-based apps. [Moved to: https://github.com/drifting-in-space/plane]

nodejs-polars - nodejs front-end of polars

Sandstorm - Sandstorm is a self-hostable web productivity suite. It's implemented as a security-hardened web app package manager.

streams - Streams Standard

bitque - A simplified Jira clone built with seed.rs and actix

proposal-zero-copy-arraybuffer-list - A proposal for zero-copy ArrayBuffer lists

wasmer - 🚀 The leading Wasm Runtime supporting WASIX, WASI and Emscripten

proposal-arraybuffer-base64 - TC39 proposal for Uint8Array<->base64/hex

lucet - Lucet, the Sandboxing WebAssembly Compiler.

wasmtime - A fast and secure runtime for WebAssembly