-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy patha.js
78 lines (57 loc) · 1.6 KB
/
a.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
const express = require('express');
const WebSocket = require( 'ws' );
function create_websocket( ws_spec ) {
if ( typeof ws_spec === 'string' ) {
return new WebSocket( ws_spec );
} else {
return ws_spec;
}
}
const sleep = (s)=>new Promise((resolve,reject)=>{
setTimeout( resolve , s );
});
(async ()=>{
const websocket_list = new Set();
const connection_list = [];
const server = express().listen(8080);
server.on( 'connection', (c)=>{
console.log( 'connection' );
connection_list.push(c);
});
server.on( 'upgrade', ()=>{
const wss = new WebSocket.WebSocketServer({ noServer: true });
wss.on( 'connection', ( websocket, req )=>{
websocket_list.add( websocket );
return on_init_websocket( websocket, req );
});
return ( request, socket, head )=>{
wss.handleUpgrade( request, socket, head, function done(websocket) {
websocket_list.add( websocket );
wss.emit('connection', websocket, request);
});
};
});
console.log('1');
await sleep(1000);
console.log('2');
const client_socket = create_websocket( 'ws://localhost:8080' );
console.log('3');
await sleep(1000);
console.log('4');
server.close();
await sleep(1000);
console.log('5');
await sleep(1000);
for ( const i of websocket_list ) {
console.log( 'close' );
i.close();
}
await sleep(1000);
console.log('6');
await sleep(1000);
for ( const i of connection_list ) {
console.log( 'destroy' );
i.destroy();
}
console.log('7');
})().then(e=>{ console.log('then',e) }).catch( e=>{ console.error('catch',e) } );;