Mijn vraag
...
ik heb middels javascript & php een server sent event kanaal openstaan en nu ben ik een test aan het draaien.
en haal ik zo'n 11600 events per minuut met een usleep van 5000 msec. dit is gewoon een test wat loopt om te kijken wat het doet, maar mij valt op dat php-fpm8.3 ongeveer 2% cpu inneemt voor dit process en apache2 bijna 4% wat dus op 6% uitkomt dus 100 /6 = 16,6 ~= 15 users per core...
dus 15 * 11600 = 174000 events met data kunnen worden gestuurd per core.
in php op de backend maak ik van de data een compressed versie en in javascript decompress ik die data weer.
Zou nginx hier beter mee overweg kunnen (server sent events) of moet ik gaan kijken naar frankenphp of react-php of zelf iets schrijven met stream_socket etc...
Ik snap dat mijn php script 2% inneemt, maar wat is apache2 aan het doen? volgens mij moet ie de data alleen maar encrypten, dat kost toch geen 4% cpu usage ?
:fill(white):strip_exif()/f/image/t6hlbzangtjSCQGr63czvcUY.png?f=user_large)
Relevante software en hardware die ik gebruik
...
php 8.3 om het te compressen
apache2
pako in javascript om te decompressen
Wat ik al gevonden of geprobeerd heb
compress in php met base64 met gzdeflate -> decompress in javascript met base64 encoding en atob en pako.inflate
basis kennis van server sent events, nog tests aan het draaien of ik het ga implementeren, maar kan zoveel events aan op 1 core dat het wel doorgaat denk ik.
php code
javascript code
Je moet pako nog wel ff includen...
...
ik heb middels javascript & php een server sent event kanaal openstaan en nu ben ik een test aan het draaien.
en haal ik zo'n 11600 events per minuut met een usleep van 5000 msec. dit is gewoon een test wat loopt om te kijken wat het doet, maar mij valt op dat php-fpm8.3 ongeveer 2% cpu inneemt voor dit process en apache2 bijna 4% wat dus op 6% uitkomt dus 100 /6 = 16,6 ~= 15 users per core...
dus 15 * 11600 = 174000 events met data kunnen worden gestuurd per core.
in php op de backend maak ik van de data een compressed versie en in javascript decompress ik die data weer.
Zou nginx hier beter mee overweg kunnen (server sent events) of moet ik gaan kijken naar frankenphp of react-php of zelf iets schrijven met stream_socket etc...
Ik snap dat mijn php script 2% inneemt, maar wat is apache2 aan het doen? volgens mij moet ie de data alleen maar encrypten, dat kost toch geen 4% cpu usage ?
:fill(white):strip_exif()/f/image/t6hlbzangtjSCQGr63czvcUY.png?f=user_large)
Relevante software en hardware die ik gebruik
...
php 8.3 om het te compressen
apache2
pako in javascript om te decompressen
Wat ik al gevonden of geprobeerd heb
compress in php met base64 met gzdeflate -> decompress in javascript met base64 encoding en atob en pako.inflate
basis kennis van server sent events, nog tests aan het draaien of ik het ga implementeren, maar kan zoveel events aan op 1 core dat het wel doorgaat denk ik.
php code
PHP:
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
| $id = 1; Core::interactive(); $origin = Server::origin(); $methods = [ 'GET', ]; header("HTTP/1.1 200 OK"); header('Access-Control-Allow-Credentials: true'); header("Access-Control-Allow-Origin: {$origin}"); header('Access-Control-Allow-Methods: ' . implode(', ', $methods)); header('Access-Control-Allow-Headers: Origin, Cache-Control, Content-Type, Authorization, X-Requested-With'); header('Access-Control-Expose-Headers: Cache-Control, Connection, Content-Encoding, Content-Language, Content-Length, Content-Type, Expires, Last-Modified, Pragma, Transfer-Encoding, X-Accel-Buffering'); header('Access-Control-Max-Age: 1800'); // a stream will have a bandwidth of 30 minutes by default header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); header('Connection: keep-alive'); header('X-Accel-Buffering: no'); header('Transfer-Encoding: chunked'); header('Content-Encoding: none'); $time = microtime(true); $start = $time; $previous = false; $date = date('Y-m-d- H:i:s'); while(true){ echo 'id: ' . $id . "\n"; echo 'event: waiting-for-response' . "\n"; echo 'data:' . base64_encode(gzdeflate(json_encode(['time' => $time, 'date' => $date]), 9)) . "\n"; echo "\n\n"; if($id % 50 === 0){ $previous = $time; $time = microtime(true); $date = date('Y-m-d- H:i:s'); } if($id === 1){ echo ':' . str_repeat('a', 4096) . "\n"; echo "\n\n"; } flush(); usleep(5000); $id++; if($time > ($start + 60)){ exit(0); } } |
javascript code
JavaScript:
1
2
3
4
5
6
7
8
| const eventSource = new EventSource(sse.url,{ withCredentials: true, }); eventSource.addEventListener('waiting-for-response', (event) => { let data = pako.inflate(atob(event.data),{ raw: true, to: 'string' }); console.log(data); console.log('waiting for response'); }); |
Je moet pako nog wel ff includen...
[ Voor 40% gewijzigd door Anoniem: 80910 op 03-03-2024 01:59 ]