-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfetch-half-duplex
More file actions
94 lines (59 loc) · 3.16 KB
/
fetch-half-duplex
File metadata and controls
94 lines (59 loc) · 3.16 KB
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
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
var http2 = require('http2');
var server = http2.createSecureServer({key,cert})
server.listen(8000)
server.on('stream',(stream,headers)=>{
var path = headers[':path'];
console.log(path);
if(path==='/test'){
test(stream,headers);
return;
}
stream.respond({
'content-type' : 'text/html; charset=utf-8',
':status' : 200
})
stream.write(html);
stream.end();
});
function test(stream,headers){
stream.respond({
'content-type' : 'text/html; charset=utf-8',
':status' : 200
})
stream.on('data',data=>{
console.log('test: ',data.toString());
stream.write(data);
});
stream.on('end',()=>{
console.log('test: request complete');
stream.write('complete');
stream.end();
});
}//test
var html = `
<script type=module>
const stream = new ReadableStream({start}).pipeThrough(new TextEncoderStream());
function start(c){
let count = 0;
const timer = setInterval(send,1000);
function send(){
console.log('sent');
c.enqueue('Hello');
if(count==5){
clearInterval(timer);
c.close();
}
count++;
}//send
}//start
const resp = await fetch('test',{method:'post',body:stream,duplex:'half'});
const reader = resp.body.pipeThrough(new TextDecoderStream()).getReader();
console.log('response stream aquired');
while(true){
const {value,done} = await reader.read();
if(done)break;
console.log('fetch',value);
}//while
console.log('done');
</script>
`;