Async-await-websockets is now running on Bun (https://bun.sh/). Until the most popular runtime hosts have support for Bun you'll have to run it on your own custom server or in a docker container.
- ✅ Uses native
websockets
- ✅ Enables
async/await
messaging from the client - ✅ Broadcast messages
- ✅ Automatic reconnection
- ❌ Procedural chat rooms
- ❌ Client authentication
mkdir my-server
cd my-server
bun init
- Add to package.json
"scripts": {
"dev": "bun --watch index.js"
},
bun install async-await-websockets
- Create
index.js
with contents:
import aaw from "async-await-websockets";
aaw("events");
mkdir events
bun dev
Your server should now be reachable on ws://localhost:1337
aaw(eventDir, services, port, log)
Name of directory that holds your socket events.
Default: events
Third party services that you need access to in your socket events (e.g. database connection). ws
is always exposed and cannot be removed.
Default: { ws: [Websocket Object] }
A port of your liking.
Default: 1337
With the parameter signature (event, websocketKey, async, error, body, result)
you can create custom server logging for all events called through root
-directory.
Default: undefined
aaw
returns an Bun websocket
-instance (https://bun.sh/docs/api/websockets)
Each .js
file in events
is scanned and available with ws.sendAsync('dir/file')
This is the signature for any .js
file within events
:
export default async (body, services) => {
const response = await services.mongo.insertSomething(body.id);
services.ws.sendEvent('notify-about-insertion', { id: response.id });
return response;
}
Omitting the async
keyword will treat the event as a regular websocket event.
npm install async-await-websockets
import aaw from 'async-await-websockets';
const ws = aaw('wss://websocket-server.url:1337');
ws.on('open', () => {
(async () => {
try {
const result = await ws.sendAsync('example-async', { somedata: "for the backend" });
console.info(result);
} catch ({ error }) {
console.error(error);
}
})();
});
event name
(string, required)payload
(any, defaultundefined
)timeout in ms
(integer, default3000
)
When calling ws.sendAsync('some-event')
there are two possible failures:
- The call to your socket server timed out (happens on the client).
- The server threw an error because something went wrong.
In both cases sendAsync
will throw an object that contains an error-message like so:
{
error: "What went wrong"
}