OAB - ONLINE tulospalvelin
Plussat ja miinukset
- plussat
- GNU eli maksuton ja voit tehdä halutessasi muutoksia
- AJAX eli "näpsäkkä" käyttäjälle
- AJAX eli tulokset tulee heti näkyviin ilman uudelleenlatausta
- AJAX eli käyttäjä voi laittaa halaumansa juoksijat "odotukseen" aivan kuin itse ohjatussa TV-lähetyksessä
- AJAX eli palvelin ei kuormitu kaikista käyttäjän toimenpiteistä vaan palvelee vain tietoa
- Käy jopa kuuluttajan sovellukseksi. (Silja-rasteilla 2007 käytimme käytännössä vain OAB:n erityisasennusta, jossa päivitysväli oli asetettu sekuntiin)
- miinukset
- GNU eli kukaan ei tarjoa takuuta ilmaiseksi
- AJAX eli ei toimi ikivanhoilla selaimilla (IE < 5.5)
- AJAX eli ei toimi kaikilla puhelimilla ("wap" ja vanhojen selainten tuki olemassa, mutta edistyneet toiminnot ei niillä käytössä.)
- Uusi ohjelmisto ja siten vähän (3 kertaa) testattu tositilanteessa
Arkkitehtuuri
Kts. liite (PDF).
Asennus
- Vie paketti palvelimelle (siis julkiselle) ja pura se
- Varmista että server.pl ohjelmaa ei voi ajaa cgi-scriptinä esim. nimeämällä se uudelleen ilman päätettä.
Käynnistä palvelin vapaaseen porttiin esim. "./server.pl 6667".
- tee Pirilästä lähtevä tcp yhteys tyyliin "yhteys1=TCP:SERVERIIP:SERVERIPORTTI LÄHEMVA", jossa SERVERIPORTTI on juuri antamasi IP ja SERVERIIP on palvelimesi dns nimi tai ip osoite. LÄHEMVA on uusi parametri, jolla emitajat pistetään lähtemään xml-viestien update sanomiin. Version saanet Pekalta, jos ei vielä julkaistu.
- OPTIO: jos palvelimesi on palomuurattu, voit viedä tulos yhteyden kätevästi SSH:n läpi. SSH myös pakkaa xml sanomaa sopivilla parametreillä, joten esim. gprs:n yli lähes tulkoon suositeltavaa. Toimi esim. siten, että kun menet käynnistämään serverisi ssh:lla, teet sen sovelletusti komennolla "ssh -L 6667:127.0.0.1:6667 -C -o CompressionLevel=5 tunnus@palvelin" ja pirilän asennat lähettämään dataa omalle koneellesi (127.0.0.1). Näin kuso ohjautuu ssh-putken yli serverille ohi palomuurien.
- Tee pirilässä "Yhteys"-"Uusintalähetys"-"Muu valinta yhteyteen"-"ulosmenevän yhteytesi numero"-"Yhtenä tiedostona kaikki"-"Ilmoittautuneet". Nyt ohjelma lähettää kaikkien kilpailijoiden nimet, seurat ja lähtöajat, sekä väliaikapisteet palvelimelle.
- Käy kisa.
- Optio: Voit lähettää kisan jälkeen kaikki tiedot jälleen uudelleen uusintalähetyksellä. Tulosanomien tiedosto pienenee hieman.
Suorituskykyviilausta
Oletusasennuksella ja perusserverillä homma rouhinnee moitteita tuhansiin yhtäaikaisiin käyttäjiin. Voit tehdä testiä esim. paketissa olevalla perfTest.bash scriptillä. Jos aiot käyttää jossain todella isossa kannattaa viilata/tsekata seuraavia asioita:
- PHP-kiihdytin, esim. APC. Ehdoton juttu missä tahansa vakavassa php-hostauksessa. Tai korvaa php scripti esim. Java Servletillä, joka pysyy muistissa.
- Sijoita jsontiedostot ram levylle. Toinen tosi iso parannus.
- Tingi hieman päivitystaajuudesta (parametri oab.js tiedostossa) esim. 20 sekuntiin. Karkkikoidusti tuplaus tuplaa mahdolliset kuuntelijat.
Lataus
Lataa ohjelma täältä.
Kohtasitko ongelman? Löysitkö bugin?
Ohjelma on vapaan lähdekoodin alla eikä se virtuaalisesti maksa mitään. Mutta kun en myöskään saa siitä tuloja, älä usko että pystyn mahdottomuuksiin tuen antamisessa tai korjaamaan bugin seuraavaksi päiväksi. Harrastaneisuuden verran annan (vain) OAB:n liittyvissä asioissa vinkkiä sähköpostitse osoitteesta matti ät nettirasia dot com. Samaan lootaan voi lähettää niitä bugiraportteja ja kehitysehdotuksia, mielellään otsakkeella, joka sisälttää sanan "OAB". Maksettu konsultaatio on tietenkin asia erikseen.
Tulospalvelua tuottavilta yrityksiltä (ResultFellows, Kokkens) voit myös koittaa saada tukea, nämä velhot taitavat koko paketin ja ossaavat tarvittaessa virittää tämänkin halutessasi. Luonnollisesti polkuhintaan.
FAQ
- Toimiiks kännykällä? Ei haluta kisapaikalla mennä tulostaulle!
- Toimii, jos siinä on XMLHttpRequest. Käytännössä toistaiseksi siis melko harvassa. N-sarjan Nokialaisissa (noksun uudella webkit-selaimella) ainakin. Kevyen wap-palvelimen rakennus ei kyllä olisi iso homma, mutta siinä siis ei olisi odotustoimintoja ym. hienouksia. Ehkä ensi keväänä.
- Kuinka saan yhtenevästi järjestetyt väliajat näkyviin kun kisassa on ollut käytössä perhoslenkit?
- Kisan jälkeen ota lataus-sivulta sortsplits perl ohjelma. Aja sen läpi MaalEmit32 ohjelmasta tekemäsi xml-tiedosto, jossa emit-väliajat. Lähetä järjestetty tiedosto netcatillä (nc host port < sortattu.xml) OAB serveriin. Nauti.
- Entäs viesti?
- Onnistunee samalla teknisellä periaatteella, mutta en ole antanut asialle ajatuksen poikastakaan.
ChangeLog
- 1.4.2007: "Silja2007-versio". Korjattu läjä bugeja, jotka olin huomaamattani aiheuttanut SM-yön jälkeisissä lisäyksissä (esti itse asiassa sovelluksen käyttämisen todellisessa ympäristössä). Korjattu emitaika-analyysissä ollut bugi (cumu sija sekaisin delta sijan kanssa värien asetuksessa). Lisätty tuki vanhoille selaimille ja kehittymättömille matkapuhelimien selaimille (erittäin vähän testattu ja sisältää varmasti virheitä. Muistaakseni väliaikapisteiden järjestys funktio bugaa.). Lisätty yksinkertainen lehdistötulosten generointi.
- 28.9.2006: Korjattu (toivottavasti, lue ei testattu lainkaan laitepulan takia) emittietojen lähetysbugi, joka kaatoi ensin selainsoftaa SM-yössä. Lisätty listoihin lähtöajat ja seurat. Lisätty "odotus toiminto", ja kisakello. Nämä nojaavat käyttäjän aikaan, joten kisa-aika kannattaa laittaa mahdollisuuksien mukaan valtakunnanaikaan. oab.js tiedostosta kannattaa siis myös asettaa kisan aikavyöhyke kohilleen (ol. Suomen kesäaika). Lisätty "forceReset", jos palvelimen results tiedosto on pienempi kuin asiakkaan pyytämä alaraja (uudelleenlähetys käynnissä olleeseen kisaan, kannattaisi tosin tehdä jonkin aikaleiman kanssa). Korjattu Opera-yhteensopivuus ongelma.
Muistiinpanoja
XML sanomissa
- "control order" ei toimi update viesteissä (muut kuin emit ajat) ??
- lähetettävä väliaikatyyppi (emit tai norm) riippuu uusintalähetyksessä automaattitulostuksen asetuksista. eli ensin automaattitulostuksesta emitajat päälle, niin sitten tulee uudelleenlähetykseen. Samoin asetukset aiheuttavat uudelleen lähetyksen toistumisen automaattitallennuksen välein.
resultrows tiedosto, muotoa:
[kilpnro,"tila",maaliaika,[["vapoint",va],["vapoint2",va]]],
Myöhempi rivi korvaa edellisen tiedon. Käytönnössä nämä on siis
classes.txt muotoa:
["ClassName",["split_1_km","split_2_km"]],
Rivit siis on JSON taulukon sisusta, joiden ympärille julkinen palvelin viel‰ heitt‰‰ yhdet hakaset. Kaikki tekstitiedostot luonnollisesti utf8 formaatissa.
Emitanalyysin periaate eli ero välin kärkeen kohdan väri:
- jokaiselle juoksijalle lasketaan level = nopeinKisanAika/omaKisanAika
- jos VälinNopeinAika/VälinOmaAika + toleranssi(0.1) > level:
- jos 0.1-0.3 -> pieni virhe
- enemmän ->suuri virhe
- Hyvä väli (vihreä), jos jompi kumpi seuraavista:
- neljän parhaan joukossa
- 6 % oman levelin paremmalla puolella
TODO:
- TÄMÄ EHKÄ KORJATTU, TÄYTYY TESTATA: päivitys emitajoilla, sanomamuodon tsekkaus! Kaataa värkin tällä erää.
- "asetukset" ikkuna, jossa voi asettaa ominaisuuksia, kuten "laajennettu" väliaika-analyysi
- poista dojo käytöstä. Käytetään vain xmlhttprequestin käyttöön, johon selkeästi overkill.