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.
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:
Helaas heb ik die shell-toegang niet.
Of kan dat via een php-file met exec()?
Ik ga dat eens proberen...
[size=xsmall]Toevoeging op 27/12/2019 09:34:46:[/size]
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?
[size=xsmall]Toevoeging op 27/12/2019 09:40:21:[/size]
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:
{
"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)...
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
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?