1+ // --------------------SERVER--------------------
2+ // -> /server/simple.mjs
3+ // ----------------------------------------------
4+
5+ import { WebSocket as WsWebSocket } from 'ws'
6+ import { WebSocket as UndiciWebSocket } from './index.js'
7+ import { bench , run , group } from 'mitata'
8+
9+ const __GLOBAL_WEBSOCKET__ = true
10+
11+ const binary = new Uint8Array ( 0 )
12+
13+ const url = 'http://localhost:5001'
14+
15+ const connections = [ ]
16+
17+ group ( 'send' , ( ) => {
18+ {
19+ const ws = new WsWebSocket ( url )
20+ let _resolve
21+ ws . addEventListener ( 'message' , ( ) => {
22+ _resolve ( )
23+ } )
24+ bench ( 'ws' , ( ) => {
25+ return new Promise ( ( resolve , reject ) => {
26+ ws . send ( binary )
27+ _resolve = resolve
28+ } )
29+ } )
30+ connections . push ( ws )
31+ }
32+ {
33+ const ws = new UndiciWebSocket ( url )
34+ let _resolve
35+ ws . addEventListener ( 'message' , ( ) => {
36+ _resolve ( )
37+ } )
38+ bench ( 'undici' , ( ) => {
39+ return new Promise ( ( resolve , reject ) => {
40+ ws . send ( binary )
41+ _resolve = resolve
42+ } )
43+ } )
44+ connections . push ( ws )
45+ }
46+ if ( __GLOBAL_WEBSOCKET__ && typeof globalThis . WebSocket === 'function' ) {
47+ const ws = new globalThis . WebSocket ( url )
48+ let _resolve
49+ ws . addEventListener ( 'message' , ( ) => {
50+ _resolve ( )
51+ } )
52+ bench ( 'undici - global' , ( ) => {
53+ return new Promise ( ( resolve , reject ) => {
54+ ws . send ( binary )
55+ _resolve = resolve
56+ } )
57+ } )
58+ connections . push ( ws )
59+ }
60+ } )
61+
62+ for ( const ws of connections ) {
63+ // for fairness
64+ ws . binaryType = 'arraybuffer'
65+ await new Promise ( ( resolve , reject ) => {
66+ ws . addEventListener ( 'open' , ( ) => {
67+ resolve ( )
68+ } )
69+ ws . addEventListener ( 'error' , ( err ) => {
70+ reject ( err )
71+ } )
72+ } )
73+ }
74+
75+ await run ( )
76+
77+ for ( const ws of connections ) {
78+ ws . close ( )
79+ }
0 commit comments