@geut/fastify-uws
v6.0.0
Published
uWebSockets.js for fastify
Downloads
470
Readme
fastify-uws
uWebSockets.js for fastify
Install
$ npm install @geut/fastify-uws
Usage
import { getUws, serverFactory, WebSocketStream } from '@geut/fastify-uws'
import fastifyUwsPlugin from '@geut/fastify-uws/plugin'
import fastify from 'fastify'
const app = fastify({
serverFactory
})
await app.register(fastifyUwsPlugin)
app.addHook('onReady', async () => {
// access to uws app
const uwsApp = getUws(app)
})
app.websocketServer.on('open', (ws) => {
console.log('OPEN')
})
app.websocketServer.on('close', (ws) => {
console.log('CLOSE')
})
app
.route({
method: 'GET',
url: '/',
handler(req, reply) {
return 'hello from http endpoint'
},
uws: {
// cache subscription topics to produce less memory allocations
topics: [
'home/sensors/ligth',
'home/sensors/temp'
]
},
uwsHandler(conn) {
conn.subscribe('home/sensors/temp')
conn.on('message', (message) => {
conn.publish('home/sensors/temp', 'random message')
})
conn.send(JSON.stringify({ hello: 'world' }))
}
})
.get('/stream', { uws: true }, (conn) => {
const stream = new WebSocketStream(conn)
stream.on('data', (data) => {
console.log('stream data from /stream')
})
})
.listen({
port: 3000
}, (err) => {
err && console.error(err)
})
Benchmarks
- Machine: linux x64 | 2 vCPUs | 6.8GB Mem
- Node:
v18.15.0
- Run: Wed Apr 12 2023 19:06:58 GMT+0000 (Coordinated Universal Time)
- Method:
autocannon -c 100 -d 40 -p 10 localhost:3000
(two rounds; one to warm-up, one to measure)
| | Version | Router | Requests/s | Latency (ms) | Throughput/Mb | | :-- | --: | --: | :-: | --: | --: | | fastify-uws | 1.0.0 | ✓ | 84001.6 | 11.50 | 12.58 | | 0http | v3.5.1 | ✓ | 50275.2 | 19.41 | 8.97 | | bare | 10.13.0 | ✗ | 49063.2 | 19.94 | 8.75 | | h3 | 1.6.4 | ✗ | 48583.2 | 20.10 | 7.97 | | fastify | 4.15.0 | ✓ | 48141.6 | 20.30 | 8.63 | | h3-router | 1.6.4 | ✓ | 48025.6 | 20.34 | 7.88 | | polka | 0.5.2 | ✓ | 47676.0 | 20.49 | 8.50 | | server-base | 7.1.32 | ✗ | 47286.4 | 20.68 | 8.43 | | server-base-router | 7.1.32 | ✓ | 46884.0 | 20.85 | 8.36 | | yeps | 1.1.1 | ✗ | 45748.0 | 21.36 | 8.16 | | connect | 3.7.0 | ✗ | 45615.2 | 21.44 | 8.14 | | connect-router | 1.3.8 | ✓ | 44720.0 | 21.91 | 7.97 | | vapr | 0.6.0 | ✓ | 43516.0 | 22.48 | 7.14 | | spirit | 0.6.1 | ✗ | 43287.2 | 22.64 | 7.72 | | spirit-router | 0.5.0 | ✓ | 41488.0 | 23.64 | 7.40 | | polkadot | 1.0.0 | ✗ | 39672.8 | 24.73 | 7.07 | | koa | 2.14.2 | ✗ | 38013.4 | 25.80 | 6.78 | | yeps-router | 1.2.0 | ✓ | 36993.8 | 26.54 | 6.60 | | take-five | 2.0.0 | ✓ | 36582.2 | 26.86 | 13.15 | | koa-isomorphic-router | 1.0.1 | ✓ | 36292.6 | 27.07 | 6.47 | | restify | 11.1.0 | ✓ | 35689.0 | 27.53 | 6.43 | | koa-router | 12.0.0 | ✓ | 33882.2 | 29.03 | 6.04 | | restana | 4.9.7 | ✓ | 33645.4 | 29.26 | 6.00 | | hapi | 21.3.1 | ✓ | 32087.2 | 30.68 | 5.72 | | express | 4.18.2 | ✓ | 11337.0 | 87.64 | 2.02 | | fastify-big-json | 4.15.0 | ✓ | 11012.2 | 90.32 | 126.70 | | express-with-middlewares | 4.18.2 | ✓ | 10000.8 | 99.45 | 3.72 | | trpc-router | 10.19.1 | ✓ | 6594.1 | 150.95 | 1.97 | | foxify | 0.10.20 | ✓ | N/A | N/A | N/A | | galatajs | 0.1.1 | ✓ | N/A | N/A | N/A | | micro-route | 2.5.0 | ✓ | N/A | N/A | N/A | | micro | 10.0.1 | ✗ | N/A | N/A | N/A | | microrouter | 3.1.3 | ✓ | N/A | N/A | N/A | | total.js | 3.4.13 | ✓ | N/A | N/A | N/A |
Issues
:bug: If you found an issue we encourage you to report it on github. Please specify your OS and the actions to reproduce it.
Contributing
:busts_in_silhouette: Ideas and contributions to the project are welcome. You must follow this guideline.
License
MIT © A GEUT project