Etusivu
PenaPedia
Tietoa Penasta
Valtiopäivät
Pena Palsta
Kuvakalleria
Savukehinnasto
Linkkejä
Materiaalia
Vanhat tiedotteet

Ajoneuvotietokanta (PROTO)
Osoitetietokanta (V.2 Tulossa!)

Yritystietokanta (UINUAA)

Vanhat uutiset

Sähkönsiirron tariffilaskuri

Lääketietokanta

Wikiselain

Kappale Kauneinta Suomea
Metsäkaatopaikkoja
--> Adolf <--
LOTTO-numerot

PenaNetworksin museo
PenaNetworksin kirjasto

Suosittelemme
Ääliömäiset sivustot
Artikkelien kommentit

Pulautteet

<Marija Zaharova> Venäjä valmis vakaviin ehdotuksiin rauhasta
<Dmitri Peskov> Ison-Britannian lausunto, jonka mukaan Ukraina voisi käyttää brittiläisiä aseita Venäjällä sijaitsevia kohteita vastaan, on suora ja vaarallinen eskalaatio.
<JAAAAJOLINNONMAAA> PERSEESSÄNI SURISEE BLUETOOTH ANUSTAPPI
<Lihatiedotus> Ostan naisten kusiset stringit omaan käyttöön.
<Lihatiedotus> Viranomaiset selvittävät tällä hetkellä syytä useisiin ruokamyrkytyksiin. Miskalan mukaan tällä hetkellä epäilys kohdistuu kasviksiin ja niiden huonoon valmistustapaan.

Nimesi:

Lausahdus:

87 Käyttäjää paikalla! 0.009382963180542

Muista katsoa myös paikallaolijat!

Herra_Snellman

Pena Palsta

Etusivu | Haku | Käyttäjälista | Rekisteröidy | Ohjeet

Käyttäjätunnus: Salasana:

Paikallaolijoiden kehityssäije

Etusivu -> PenaSäätiöt -> Paikallaolijoiden kehityssäije

PenaItse
Liittynyt:
11.5.2012 18:55
Paikallaolijoiden kehityssäije
Lähetetty: 10.9.2023 06:07
Koska en pysty nähtävästi pitämään näppejäni paikallaolijoista erossa, on sen kehityssäie sitten perustettava tänne.

Paikallaolijat



Arvoisat Asiakkaamme;
Paikallaolijoiden ohjelmisto on kirjoitettu kokonaan uusiksi! Nyt käytämme SQLite3:Sta entisen MySQL:n sijaan, SQLiten tiedostot generoidaan lennosta ja säilytetään ainoastaan keskusmuistissa.
Uutena ominaisuutena otetaan käyttäjän sisääntulon aikaleima, tästä saadaan laskettua vähnintään toteutuva vierailuaika. Myös ensimmäinen haetu URI pidetään tallessa - näin tiedetään millä asioilla ketäkin on tänne alun perin päätynyt.
Pakollisia muutoksia myöhemmin: En voinnut vastustaa kiusausta olla lisäämättä erikseen käsittelyä viranomaisien ja muiden instanssien näytölle täällä. Tällä hetkellä näytämme POLYYSIN paikallaolon erikseen. Myös kunnat, sairaalat ja lääkärit ovat tuloillaan!
Käytössä olevat instanssit IP-avaruuksineen näette painamalla tästä.

Lopulta alkoi tehdä mieli jo liikaa muuttuvaa sisältöä ja nyt on jo sudeksi syntyessään todettuna <iframe>-mallinen ratkaisu, jossa sisältöä päivitetään, päivittämättä sivua sekä ilman JavaScriptiä. Karttapuolella semmoinen toimii vielä jokseenkin, tässä tapauksessa siitä ei nauti sitten yhtään :@
Se on tehtävä reaalaikaisella SSE:llä tai JavaScript-timereillä, jotka "pollaavat" hetken välein PenaSäätiöiltä uusinta datasettiä. Tämän ansioista voidaan luopua taas tuosta iframesta sekä saadaan päivitys ainoastaan tekstiin.
Toki sisältö oletuksena tarjoillaan muuttumattomana ilman JavaScriptiä kuten ennenkin, mutta se otetaan rinnalle uutena optiona.


----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 7.12.2023 22:16
PenaSäätiöt ovat viimein päivitetty kauttaaltaan ja sain viimein myös himoitsemani SQLITE_BUSY_TIMEOUT lipun ominaisuuksiimme uusimman SQLITE3:n myötä.

Huomasin myös sattumalta, että kantahan voidaan avata myös read-only tilaan. Totta vitussa voidaan, ei vain tyhmä pää tajunnut sitä aiemmin. Näin ollen muutin ohjelmarakennetta siten, että käyttäjän tullessa, avataan kanta rw, mutta heti kun on kysytty onko käyttäjä uusi ja tehty toimenpiteet kantaan, se suljetaan välittömästi ja avataan taas uudestaan READ_ONLYnä.

Viikkojen kuluessa laitoin myös merkille, silloin tällöin, Säätiöillemme saapuminen lagaa aivan vitusti. Kun kerran pääset sisään, toimii taas. Vaikka tietokanta on tallennettuna keskusmuistille luotuun tmpfs-osioon, ovat nuo nykyiset älyttömät 500 + käyttäjän yhtäaikaiset pyynnöt vain yksinkertaisesti liikaa tiedostoperäiselle tietokannalle.

Heille mainittakoon, jotka eivät tiedä tämän homman jujua, jujuhan on se, yksinkertaisesti, ettei tietokonneella ei voida kuin yhdellä tiedostokahvalla kirjoittaa kerrallaan tiedostoon, lopputuloksena muuten tiedosto tyhjenee tai korruptoituu.

Kokeilin myös konkreettisesti luoda shared-memorylle sen vitun kannan, siinä vain tulee se ongelma, jota osasin odottaakin: apachen eri prosessit eivät pääse samaan kantaan käsiksi.

Mielestäni ainoa tapa saada tämä sqlite-pohjaisesti tehtyä on pitää kanta tmpfs:Ssä ja käsitellä sitä niin nopeasti kuin suinkin mahdollista. Entisessä MySQL pohjaisessa paikallaolijoissahan ei tätä ongelmaa ollut ollenkaan, koska MySQL ja palvelinpohjainen.

Lopputuloksena rakenne on seuraavanlainen: Käyttäjän sisääntullessa tarkistetaan onko tietokantatiedostoa edes olemassa, jos ei --> kutsutaan luojaa() luomaan se ja luodaan table, jos vanhaa ei ole. Tässä tietokanta luodaan ja kahva suljetaan heti. Tämä tapahtuu vain, jotta seuraavana tuleva SQLITE3 avaus READ_ONLY-tilaan ei aiheuta pysähdystä. Kokeilin empiirisesti, ettei SQLITE3_READ_ONLY ja SQLITE3_OPEN_CREATE lippuja voida laittaa samaan avaukseen.
Tässä vaiheessa tietokanta on auki ja tehdään kysely, jos kysely epäonnistuu tablen puuttumisen vuoksi, kutsutaan luojaa() uudelleen luomaan se ja hylätään sen käyttäjän paikallaolon tallennus.
Seuraavassa kutsussa onkin jo valmiina kaikki tietokannat ja tiedostot luotuina.
Edellä mainitun kyselyn tuloksen jälkeen (oli vastaus kumpi tahansa), avataan uusi kahva, taas rw-tilassa. Suht monimutkainen kysely on alustettu jo valmiiksi, instansseja tutkittu yms yms, voidaan vaan pikaisesti heittää sqlite3::exec():llä tiedot sissään ja sulkea välittömästi rw-kahva.
READ_ONLY on koko ajan auki. Niitä voi olla vaikka "miljoona" yhtä aikaa avoinna eikä mitään ongelmaa.

Tämän lisäksi oli tarkoitus poistaa kannasta kokonaan journalointi, mutta olinkin sen jo aiemmin tehnyt. Poistinpa tämän kaiken lisäksi sitten myös synkronoinnin, joka tarkoittaa siis sitä, ettei kirjoituskahvan sulkemisen jälkeen mitenkään erityisesti hätäillä datan kirjoittamisessa fyysisesti levylle (joka tässä tapauksessa on tmpfs-asema, mutta sitä käsitellään kuin se olisi tiedosto tottakai)

Olennaisinta on nyt, ettei kanta ole lukossa sinä aikana, kun kysytään onko käyttäjä uusi vai alle tunti sitten liikkunut täällä. 500 käyttäjää ja 4-5k tunnin sisällä käynnyttä, kaipa siinä kova kuhina käy.

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 7.12.2023 22:37
Laitoin vielä kokeeksi ennen paikallaolijoiden kutsumista sivun ulostamaan sisältö ob_flush() ja flush()illa.
Ideana on, jos paikallaolojat lagaisi, tulisi ainakin ulkoasu ja muu sivusto esille välittömästi vs. että lagin ajan olisi valkoinen ruutu.
Käytännön elämässä toki voi olla hyvinkin niin, että noiden kahden funktion kutsuminen vie jo suuremman ajan kuin jätettäisi kutsumatta.
Toisaalta taas, jos sivun sisällä on jotain muuta, joka aiheuttaa hitautta, tuo auttaa siihenkin. Onhan tuo sentään juuri sivuston itse sisällön yläpuolella.
Myös paikallaolijoiden lukumäärän katsominen ja kirjaukset voitaisiin tehdä erillään, katsominen alussa, kirjaukset sivun lopussa.

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 15.12.2023 02:58
Lisätty nyt modifioitu virhesivu, josta kerätään paikallaolioihin HTTP-statuscodet.
Jos status != 200, maalataan rivi punaisella = sivua ei löydy / jotain muuta ongelmaa.
Pyydetty URI näkyy, mutta ei ole linkkinä tässä tapauksessa. Toimimattomia linkkejä ei tule tehdä, ettei sivusto saa huonoa karmaa hakukoneiden silmissä.

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 15.12.2023 04:57
Lisätty IP-osoite päättämään oman värinsä! :D
Tässähän olisi ideaa myös kuinka vakoilija ryhmittelisi rivejänsä ...

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 15.12.2023 10:10
Koko URI:n linkin nimi on korvattu sivun nimellä - siis html:n titlellä! Tämä oli hyvä ratkaisu kaventaa koko sivua.
Jos sivun_nimeä ei ole saatavilla, se on "PenaSäätiöt" muussa tapauksessa, mutta paikallaolijoissa siinä tapauksessa kirjoitetaan a) hakemistona, jos ei ole URI-argumentteja b) pelkkinä argumentteinä, jos niitä on. Ja linkki vie aina oikeaan paikkaan.

Tein myös proton reaaliaikaisesta paikallaoljoista JavaScriptin ja SSE:n avulla. Jollain aikavälillä sekin tulee optioksi, mutta ei pakolliseksi.
Me PenaSäätiöillä emme koskaan pakota Asiakkaillemme JavaScriptiä emmekä tarjoile sitä, silloin jos tarjoilemme, turhaan tai huvin vuoksi.

Kotinäyttöprojektista otettu mallia:


function paikallaolijoiden_sse() {
$db = new SQLite3('XXXXXXXXXXXXXXXXXXXX', SQLITE3_OPEN_READONLY);
$sql = 'SELECT ROUND(CAST((julianday(lastReqTime) - julianday(incomeTime)) AS REAL) * 24 * 60) AS minuuttia_paikalla,
lastReqTime, ip, countReq,
"- "||ROUND(CAST((julianday(\'now\',\'localtime\';) - julianday(lastReqTime)) AS REAL) * 24 * 60, 2)||" min" AS minuuttia_sitten,
incomePage, incomeReferer, lastReferer,
currentUri, userAgent, sivunNimi, emoiji, instanssi, statusCode
FROM paikalla ORDER BY lastReqTime DESC LIMIT 10;';
$res = $db->query($sql);

$arr = array();
while ($row = $res->fetchArray(SQLITE3_ASSOC)) {
$arr[] = $row;
}
$db->close();
echo "data: ".json_encode($arr)."\n\n";
}

if (isset($_GET['sss'])) {
header('Content-Type: text/event-stream';);
header('Cache-Control: no-cache';);
for ($i = 0; $i < 100; $i++) {
paikallaolijoiden_sse();
ob_flush();
flush();
sleep(1);
}
exit;
}


Hyvin yksinkertainen kokeilu


function ulosta(id, txt) {
document.getElementById(id).innerHTML = txt;
}
var source = new EventSource("/paikallaolijat.php?sss=555";);
source.onmessage = function(event) {
const obj = JSON.parse(event.data);
let i, out = '';
out = '<table>';
for (i = 0; i < obj.length; i++) {
console.log(obj[i]['ip']);
out += "<tr><td><span>" + obj[i]['ip'] + "</span></td>";
out += "<td>" + obj[i]['minuuttia_paikalla'] + "</td>";
out += "<td>" + obj[i]['countReq'] + "</td>";
out += "<td>" + obj[i]['minuuttia_sitten'] + "</td>";
out += "<td>" + obj[i]['sivunNimi'] + "</td></tr>\n";
}
out += '</table>';
ulosta('rivi', out);
}


Tuo jo ulostaa paikallaolijat reaaliajassa ja tähän etappiin on hyvä päättää tämän kertainen paikallaolijoiden kehitys.
Sisennyksiä ei näy, koska code-tagiin en ole vielä tyytyväinen ... :(

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

PenaItse
Liittynyt:
11.5.2012 18:55
Vs: Paikallaolijoiden kehityssäije
Lähetetty: 15.12.2023 10:11 Muokattu viimeeksi: 15.12.2023 10:20
Miks vitussa tuo tuli kahteen kertaan! :O
No kyllä tämänkin ohjelmiston vuoro tulee vielä :$

----------------------------------------
olen pena ja lisäksi vitun homo seniili mulkkuperse joka tuunaa 106 vetoakselia perslävellään soinia soimaten pusikon piinaavassa uutteruudessaan

Vastaa aiheeseen

Sinun pitää kirjautua sisään tai rekisteröityä osallistuaksesi keskusteluun!

Copyright © PenaNetworks säätiöt 2006 - 2024