Skip to content

Commit 370f8cb

Browse files
committed
use cluster
1 parent 3d62a66 commit 370f8cb

6 files changed

Lines changed: 66 additions & 15 deletions

File tree

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,28 @@
1+
import cluster from 'node:cluster'
12
import { WebSocketServer } from 'ws'
3+
import { cpus } from 'node:os'
24

3-
const server = new WebSocketServer({ port: 5001 })
5+
if (cluster.isPrimary) {
6+
let cpu = cpus().length
7+
while (cpu-- > 0) {
8+
cluster.fork()
9+
}
10+
} else {
11+
const server = new WebSocketServer({
12+
maxPayload: 600 * 1024 * 1024,
13+
perMessageDeflate: false,
14+
clientTracking: false,
15+
port: 5001
16+
})
17+
18+
server.on('connection', (socket) => {
19+
socket.on('message', (data, isBinary) => {
20+
socket.send(data, { binary: isBinary })
21+
// socket.close();
22+
})
23+
})
424

5-
server.on('connection', (socket) => {
6-
socket.on('message', (data, isBinary) => {
7-
socket.send(data, { binary: isBinary })
8-
// socket.close();
25+
cluster.on('exit', () => {
26+
server.close()
927
})
10-
})
28+
}
Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,31 @@
1+
import cluster from 'node:cluster'
12
import { WebSocketServer } from 'ws'
3+
import { cpus } from 'node:os'
24

3-
const server = new WebSocketServer({ port: 5001 })
5+
if (cluster.isPrimary) {
6+
let cpu = cpus().length
7+
while (cpu-- > 0) {
8+
cluster.fork()
9+
}
10+
} else {
11+
const server = new WebSocketServer({
12+
maxPayload: 600 * 1024 * 1024,
13+
perMessageDeflate: false,
14+
clientTracking: false,
15+
port: 5001
16+
})
17+
18+
// Workaround for https://github.com/nodejs/undici/issues/3202
19+
const emptyBuffer = Buffer.allocUnsafe(1)
420

5-
// Workaround for https://github.com/nodejs/undici/issues/3202
6-
const emptyBuffer = Buffer.allocUnsafe(1)
21+
server.on('connection', (socket) => {
22+
socket.on('message', (_data, _isBinary) => {
23+
socket.send(emptyBuffer)
24+
// socket.close();
25+
})
26+
})
727

8-
server.on('connection', (socket) => {
9-
socket.on('message', (_data, _isBinary) => {
10-
socket.send(emptyBuffer)
11-
// socket.close();
28+
cluster.on('exit', () => {
29+
server.close()
1230
})
13-
})
31+
}

benchmarks/websocket/websocket-echo.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// --------------------SERVER--------------------
2+
// -> /server/echo.mjs
3+
// ----------------------------------------------
4+
15
import { WebSocket as WsWebSocket } from 'ws'
26
import { WebSocket as UndiciWebSocket } from '../../index.js'
37
import { randomBytes } from 'node:crypto'

benchmarks/websocket/websocket-open-connection.mjs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// --------------------SERVER--------------------
2+
// -> /server/simple.mjs
3+
// ----------------------------------------------
4+
15
import { WebSocket as WsWebSocket } from 'ws'
26
import { WebSocket as UndiciWebSocket } from '../../index.js'
37
import { bench, run, group } from 'mitata'
@@ -15,7 +19,6 @@ const url = 'http://localhost:5001'
1519
group('open connection', () => {
1620
bench('ws', () => {
1721
const ws = new WsWebSocket(url)
18-
ws.binaryType = 'fragments'
1922
return new Promise((resolve, reject) => {
2023
ws.addEventListener('open', () => {
2124
resolve()

benchmarks/websocket/websocket-send-buffer.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// --------------------SERVER--------------------
2+
// -> /server/simple.mjs
3+
// ----------------------------------------------
4+
15
import { WebSocket as WsWebSocket } from 'ws'
26
import { WebSocket as UndiciWebSocket } from '../../index.js'
37
import { randomBytes } from 'node:crypto'

benchmarks/websocket/websocket-send-string.mjs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
// --------------------SERVER--------------------
2+
// -> /server/simple.mjs
3+
// ----------------------------------------------
4+
15
import { WebSocket as WsWebSocket } from 'ws'
26
import { WebSocket as UndiciWebSocket } from '../../index.js'
37
import { randomBytes } from 'node:crypto'

0 commit comments

Comments
 (0)