uWebSockets.js for fastify
$ npm install @geut/fastify-uws
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)
})
- 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 |
🐛 If you found an issue we encourage you to report it on github. Please specify your OS and the actions to reproduce it.
👥 Ideas and contributions to the project are welcome. You must follow this guideline.
MIT © A GEUT project