async_uws 0.0.26

Rust async HTTP & WebSocket server based on uWebSockets
# Rust Async HTTP and WebSocket Server

This server is built on top of `uWebSockets`, leveraging `tokio` for asynchronous runtime support. It is suitable for
Rust applications that require high-performance non-blocking I/O operations. If asynchronous programming is not a
requirement for your project, you may consider using a synchronous Rust server instead.
If you don't need tokio you might be interested
in [libuwebsockets_rs](https://github.com/GenrikhFetischev/uwebsockets_rs) - this is a zero-dependency rust library on
top of `uWebSockets`with the same API as in original package.

## Usage

To integrate `uWebSockets` into your Rust application, you must ensure that several native libraries are correctly
linked to your binary. These libraries are `libz`, `libuv`, `libssl`, `libcrypto`, and the appropriate C++ standard
library for your system.
Configuration for build.rs

Your `build.rs` script should link these libraries like so:

```rs
println!("cargo:rustc-link-lib=z");
println!("cargo:rustc-link-lib=uv");
println!("cargo:rustc-link-lib=ssl");
println!("cargo:rustc-link-lib=crypto");

// Conditional linking for C++ standard library based on the target OS
#[cfg(target_os = "macos")]
println!("cargo:rustc-link-lib=c++"); // Use libc++ for macOS
#[cfg(not(target_os = "macos"))]
println!("cargo:rustc-link-lib=stdc++"); // Use libstdc++ for other systems
```

## Setting Up Your Environment

### macOS Users

On macOS, you might need to specify the include path and library path for the linker to find `libuv` and `libc++`. You
can do this by setting environment variables in your shell:

```sh
export LIBRARY_PATH="/opt/homebrew/lib:$LIBRARY_PATH"
export C_INCLUDE_PATH="/opt/homebrew/include:$C_INCLUDE_PATH"
export CPLUS_INCLUDE_PATH="/opt/homebrew/include:$CPLUS_INCLUDE_PATH"
```

Replace `/opt/homebrew/lib` and `/opt/homebrew/include` with the actual paths if `libuv` is installed in a different
location on your system.

### Linux Users

On Linux, ensure that `libuv`, `libssl`, and `libcrypto` are installed via your distribution's package manager and that
the `libstdc++` library is available on your system.

### Windows Users

Unfortunately this library doesn't currently support Windows, but please don't hesitate sending a PR for Windows support
at [libuwebsockets-sys crate build script](https://github.com/GenrikhFetischev/libuwebsockets-sys/blob/main/build.rs#L13)

## Troubleshooting

If you encounter errors during compilation, such as missing header files (e.g., uv.h not found) or linking issues (e.g.,
library not found for -luv), here are some steps you can follow:

- Verify that all required libraries are installed and accessible in your system's library and include paths.
- Make sure that environment variables are set correctly before running `cargo build`.
- Use `cargo clean` to remove any stale build outputs and then `cargo build` to recompile the project.
- For verbose output that can help with diagnosing build issues, run `cargo build -vv`.

## Contributing

If you encounter any issues or have improvements to suggest, please open an issue or a pull request in the repository.
Your contributions are welcome to help make this project more robust and easier to use for the Rust community.