Skip to content

Commit

Permalink
use cluster
Browse files Browse the repository at this point in the history
  • Loading branch information
tsctx committed May 10, 2024
1 parent 3d62a66 commit 370f8cb
Show file tree
Hide file tree
Showing 6 changed files with 66 additions and 15 deletions.
30 changes: 24 additions & 6 deletions benchmarks/websocket/server/echo.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,28 @@
import cluster from 'node:cluster'
import { WebSocketServer } from 'ws'
import { cpus } from 'node:os'

const server = new WebSocketServer({ port: 5001 })
if (cluster.isPrimary) {
let cpu = cpus().length
while (cpu-- > 0) {
cluster.fork()
}
} else {
const server = new WebSocketServer({
maxPayload: 600 * 1024 * 1024,
perMessageDeflate: false,
clientTracking: false,
port: 5001
})

server.on('connection', (socket) => {
socket.on('message', (data, isBinary) => {
socket.send(data, { binary: isBinary })
// socket.close();
})
})

server.on('connection', (socket) => {
socket.on('message', (data, isBinary) => {
socket.send(data, { binary: isBinary })
// socket.close();
cluster.on('exit', () => {
server.close()
})
})
}
34 changes: 26 additions & 8 deletions benchmarks/websocket/server/simple.mjs
Original file line number Diff line number Diff line change
@@ -1,13 +1,31 @@
import cluster from 'node:cluster'
import { WebSocketServer } from 'ws'
import { cpus } from 'node:os'

const server = new WebSocketServer({ port: 5001 })
if (cluster.isPrimary) {
let cpu = cpus().length
while (cpu-- > 0) {
cluster.fork()
}
} else {
const server = new WebSocketServer({
maxPayload: 600 * 1024 * 1024,
perMessageDeflate: false,
clientTracking: false,
port: 5001
})

// Workaround for https://github.com/nodejs/undici/issues/3202
const emptyBuffer = Buffer.allocUnsafe(1)

// Workaround for https://github.com/nodejs/undici/issues/3202
const emptyBuffer = Buffer.allocUnsafe(1)
server.on('connection', (socket) => {
socket.on('message', (_data, _isBinary) => {
socket.send(emptyBuffer)
// socket.close();
})
})

server.on('connection', (socket) => {
socket.on('message', (_data, _isBinary) => {
socket.send(emptyBuffer)
// socket.close();
cluster.on('exit', () => {
server.close()
})
})
}
4 changes: 4 additions & 0 deletions benchmarks/websocket/websocket-echo.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// --------------------SERVER--------------------
// -> /server/echo.mjs
// ----------------------------------------------

import { WebSocket as WsWebSocket } from 'ws'
import { WebSocket as UndiciWebSocket } from '../../index.js'
import { randomBytes } from 'node:crypto'
Expand Down
5 changes: 4 additions & 1 deletion benchmarks/websocket/websocket-open-connection.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// --------------------SERVER--------------------
// -> /server/simple.mjs
// ----------------------------------------------

import { WebSocket as WsWebSocket } from 'ws'
import { WebSocket as UndiciWebSocket } from '../../index.js'
import { bench, run, group } from 'mitata'
Expand All @@ -15,7 +19,6 @@ const url = 'http://localhost:5001'
group('open connection', () => {
bench('ws', () => {
const ws = new WsWebSocket(url)
ws.binaryType = 'fragments'
return new Promise((resolve, reject) => {
ws.addEventListener('open', () => {
resolve()
Expand Down
4 changes: 4 additions & 0 deletions benchmarks/websocket/websocket-send-buffer.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// --------------------SERVER--------------------
// -> /server/simple.mjs
// ----------------------------------------------

import { WebSocket as WsWebSocket } from 'ws'
import { WebSocket as UndiciWebSocket } from '../../index.js'
import { randomBytes } from 'node:crypto'
Expand Down
4 changes: 4 additions & 0 deletions benchmarks/websocket/websocket-send-string.mjs
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
// --------------------SERVER--------------------
// -> /server/simple.mjs
// ----------------------------------------------

import { WebSocket as WsWebSocket } from 'ws'
import { WebSocket as UndiciWebSocket } from '../../index.js'
import { randomBytes } from 'node:crypto'
Expand Down

0 comments on commit 370f8cb

Please sign in to comment.