Stream tekst van en naar database met 1 http- en sql-request
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.
Met NodeJS kan je dit prima doen.
Gewijzigd op 20/11/2019 22:22:30 door - Ariën -
Websockets voor uitgevonden. Even doorbijten, maar werkt dan vele malen soepeler dan constant staan te pollen ...
Hier hebben ze Gewijzigd op 20/11/2019 20:27:12 door Rob Doemaarwat
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!
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:
Hoe voer ik die 'console/command'-opdracht uit?
Ik heb een command.js aangemaakt:
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)
1
2
3
4
5
6
7
8
9
10
11
12
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}/');
});
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 ;)
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 -
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"
}
"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)
1
2
3
4
5
6
7
8
9
10
11
12
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');
});
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:
> [email protected] 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! [email protected] start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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
stdout:
> [email protected] 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! [email protected] start: `node index.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] 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
Zelf raad ik shell-access en dus minimaal een VPS aan.
Gewijzigd op 27/12/2019 09:42:48 door - Ariën -
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?
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 -