Stream tekst van en naar database met 1 http- en sql-request

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior DevOps-ontwikkelaar eIDAS

Functie­omschrijving Burgers en bedrijven veilig en betrouwbaar digitaal toegang geven tot diensten en producten van het ministerie van Economische Zaken en Klimaat. Als senior DevOps-ontwikkelaar bouw je daar letterlijk aan mee. En dat doe je bij DICTU: een van de grootste en meest vooruitstrevende ICT-dienstverleners van de Rijksoverheid. Jij werkt mee aan de doorontwikkeling van eIDAS, dat staat voor Electronic IDentification Authentication and trust Services. Deze koppeling maakt de grensoverschrijdende authenticatie op overheidswebsites binnen de Europese Unie mogelijk. Het ministerie van Economische Zaken en Klimaat heeft één moderne toegangspoort voor zijn diensten en inspecties. Enkele daarvan zijn dankzij eIDAS inmiddels

Bekijk vacature »

Eddy E

Eddy E

20/11/2019 19:37:25
Quote Anchor link
Ik heb op samentypen.nl een soort chatbox: 1 inputveld voor de invoer waarin leerlingen hun antwoord/tekst typen.
De andere leerlingen (en de leerkracht) zien deze tekst ook verschijnen.

Momenteel wordt dit invoerveldt nu om de seconde opgeslagen (dmv JSON via AJAX (met jQuery)) in de (InnoDB-)database.
Met dezelfde request haal ik ook op wat andere mensen (leerlingen) hebben getypt.
Dus 1 per seconde.

Gisteren waren we met 3 klassen tegelijkertijd bezig op onze school: 80 leerlingen + 3 leerkrachten die 1x per seconde opslaan en ophalen.
Maar tegelijkertijd waren nog 8 andere klassen bezig: 400 requests per seconde.... dat is dus al 480 requests per seconde waarin er dus 1 config.php geincluded wordt, database-connectie wordt gemaakt, 1 UPDATE-statement is en 1 SELECT-statement.
En dat 480x per seconde, voor een kwartiertje lang.

Inmiddels zijn er al scholen 'geblokkeerd' wegens DDOS-lijkende-dingen.

Hoe voorkom ik dit?
Is het mogelijk om één continue-stroom (stream) open te zetten per leerling? Die alsnog alles per seconde (of liever per halve seconde) opslaat en ophaalt?
Maar dan zonder steeds een nieuwe verbinding te maken etc?

Wellicht kan dit niet. Wellicht wel.
Zo wel: op welke termen moet ik zoeken?
STREAM AJAX werd hem niet.
 
PHP hulp

PHP hulp

05/07/2020 08:24:59
 
- Ariën -
Beheerder

- Ariën -

20/11/2019 19:53:33
Quote Anchor link
Een andere manier gebruiken, zoals een bericht enkel te pushen i.p.v te pollen.
Met NodeJS kan je dit prima doen.
Gewijzigd op 20/11/2019 22:22:30 door - Ariën -
 
Rob Doemaarwat

Rob Doemaarwat

20/11/2019 20:26:43
Quote Anchor link
Hier hebben ze Websockets voor uitgevonden. Even doorbijten, maar werkt dan vele malen soepeler dan constant staan te pollen ...
Gewijzigd op 20/11/2019 20:27:12 door Rob Doemaarwat
 
Eddy E

Eddy E

22/11/2019 21:47:52
Quote Anchor link
Thanks Rob.
Dit lijkt exact wat ik nodig heb.

Je moet maar net even op die term komen... Ik kan hier mee aan de slag voor nu!
 
Eddy E

Eddy E

26/12/2019 11:09:52
Quote Anchor link
Het is even later... maar inmiddels een hosting extra genomen waarop wel Node.JS draait:
samentypen.nl/socket/ geeft 503 aan, dus de websockets luisteren wel.
Via de DirectAdmin (maar dan een andere versie??) heb ik de package.json weten te installeren:

https://i.ibb.co/thbG7SB/Screen-Shot.png

Hoe voer ik die 'console/command'-opdracht uit?
Ik heb een command.js aangemaakt:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
source /home/samenty/nodevenv/socket/12/bin/activate && cd /home/samenty/socket


Deze staat in dezelfde map als package.json. Hoe open ik die?

Ik trachtte dit ook te doen in package.json zelf (want die kan ik 'runnen'):
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
const http = require('https');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Ik kan <b>beginnen</b>.<br>');
}).listen(port);

server.listen(port, hostname, () => {
  console.log('Server running at http://${hostname}:${port}/');
});


Ik ben echt een leek, kan aardig de handleidingen toevoegen, maar de koppeling naar een database heb ik niet.. (heb ik dat nodig?).

Wie kan mij even op weg helpen?
Meekijken en inloggen kan ook, via Persoonlijk Bericht dan wel ;)
 
- Ariën -
Beheerder

- Ariën -

26/12/2019 11:49:52
Quote Anchor link
Is het niet zinvol om een tutorial te zoeken over een chat-systeem in node.js? Dan weet je ook een beetje de basis hoe het werkt.

https://itnext.io/build-a-group-chat-app-in-30-lines-using-node-js-15bfe7a2417b

Toegang tot Shell-commandline is altijd erg handig.
Gewijzigd op 26/12/2019 11:56:46 door - Ariën -
 
Eddy E

Eddy E

27/12/2019 09:25:04
Quote Anchor link
Helaas heb ik die shell-toegang niet.
Of kan dat via een php-file met exec()?
Ik ga dat eens proberen...

Toevoeging op 27/12/2019 09:34:46:

Ik heb node.js aan staan.
Als ik die tutorial volg en een bestand aanmaak (in dezelfde map als waar app.js is gemaakt door DirectAdmin) kan ik die benaderen via https://samentypen.nl/socket/domains/samentypen.nl/public_html/socket/index.js (ja dubbel op al dat gedoe met domain/... etc, maar dit werkt prima in submappen.
Zie de code daar die luistert naar poort 8080... maar dit bestand (index.js) wordt toch niet uitgevoegd?
Hoe doe ik dat?

Toevoeging op 27/12/2019 09:40:21:

En nog een aanvulling: ik kan dus wel NPM-code uitvoeren en JS-files uitvoeren, mist deze code in package.json staat.
Ik heb nu even 1 regel laten uitvoeren, namelijk const express = require('express'); om te testen.

Gehele code van package.json:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
    "name": "samentypen_socket",
    "description": "De socket die gebruikt wordt bij SamenTypen.nl",
    "version": "12.9.0",
    "dependencies": {
        "express": "^4.15.2",
           "socket.io-adapter": "~1.1.0",
    "socket.io-client": "2.3.0",
    "socket.io-parser": "~3.4.0"
    },
    "main": "app.js",
    "scripts": {
        "startcode": "const express = require('express');"
    },
    "keywords": [],
    "author": "Eddy Erkelens",
    "license": "ISC"
}


Hierdoor kan ik index.js (zie hieronder) uitvoeren.
Maar krijg foutmelding (daar weer onder)...

index.js
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);

app.get('/', function(req, res) {
    res.send('Hello world!');
});

const server = http.listen(8080, function() {
    console.log('listening on *:8080');
});


Foutmeldingen
Quote:
returncode: 1
stdout:
> samentypen_socket@12.9.0 start /home/samenty/domains/samentypen.nl/public_html/socket
> node index.js
stderr:
npm WARN lifecycle The node binary used for scripts is /home/samenty/nodevenv/domains/samentypen.nl/public_html/socket/10/bin/node but npm is using /opt/alt/alt-nodejs10/root/usr/bin/node itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with.
internal/modules/cjs/loader.js:638
throw err;
^

Error: Cannot find module 'socket.io'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:636:15)
at Function.Module._load (internal/modules/cjs/loader.js:562:25)
at Module.require (internal/modules/cjs/loader.js:692:17)
at require (internal/modules/cjs/helpers.js:25:18)
at Object.<anonymous> (/home/samenty/domains/samentypen.nl/public_html/socket/index.js:4:12)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! samentypen_socket@12.9.0 start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the samentypen_socket@12.9.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /home/samenty/.npm/_logs/2019-12-27T08_43_40_203Z-debug.log
Gewijzigd op 27/12/2019 09:44:53 door Eddy E
 
- Ariën -
Beheerder

- Ariën -

27/12/2019 09:41:07
Quote Anchor link
Dit is niet een triviale manier die veel toegepast wordt. Is er ook een documentatie over? En wat geeft de log aan?

Zelf raad ik shell-access en dus minimaal een VPS aan.
Gewijzigd op 27/12/2019 09:42:48 door - Ariën -
 
Eddy E

Eddy E

27/12/2019 09:49:58
Quote Anchor link
Dat raadde mijn vorige hosting ook aan, maar VPS is denk ik ver boven mijn pet.
Ben inmiddels best wel aardig in PHP, HTML en CSS (jQuery beginnend) maar van onderliggende systemen de ballen verstand. En dan is een VPS best duur... Daarom heb ik een hosting gezocht (en gevonden) met node.js reeds draaiend. En een goed bedieningspaneel waar ik dus wel index.js kan runnnen... maar die dependencies{} kloppen niet of zo?
 
- Ariën -
Beheerder

- Ariën -

27/12/2019 09:53:24
Quote Anchor link
DirectAdmin is nog best eenvoudig te beheren via simpele commands in SSH.

Maar meldt de genoemde log nog wat spannends? Kijk ook even het juiste pad na van socket.io.
Gewijzigd op 27/12/2019 09:55:00 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.