A universal Berkeley sockets implementation for both WebAssembly (based on WebRTC) and native platforms with bindings for C, Go and TinyGo.
unisockets implements the Berkeley sockets API. On a native environment like Linux, it falls back to the native Berkeley sockets API; on WASM it uses WebRTC for fast peer-to-peer communication instead of the (non-available) native API. This allows you to "just recompile" an existing socket server/client (such as a web server etc.) and run it natively, in a WebAssembly runtime or in the browser, without the need for a WebSocket proxy like in emscripen or some other proxy mechanism. You've heard that right, this library allows you to
bind in the browser!
The system is made up of the following components:
recvetc. When compiling natively, it falls back to the native implementation.
These components have no hard dependencies on one another, and can be used independendly.
Additionally, a universal C/C++ header for easy usage and Go/TinyGo bindings (see ) have been created.
The signaling components use the following protocol:
There are two implementations of the signaling server. The TypeScript version is maintained is this repo, the Java version can be found in junisockets.
Public signaling server instances:
You want a Kubernetes-style system for WASM, running in the browser and in node? You might be interested in webnetes, which uses unisockets for it's networking layer.
Check out the universal C/C++ header for the C API docs or for the Go/TinyGo API. Many examples on how to use it (C, TinyGo & Go clients & servers plus an example WebAssembly runner) can also be found in the
cmd folder. Looking for advice on how to build and run natively or using WASM? Check out the
unisockets (c) 2021 Felix Pojtinger and contributors
Generated using TypeDoc