Curs Javascript


Cu SSE (Server-Sent Events - Evenimente trimise de server) pagina web poate sa primeasca automat date de la server fara solicitari de trimitere.


Primirea de evenimente de la server

Evenimentele SSE sunt unidirectionale; mesajele sunt transmise intr-un singur sens, de la server la pagina web.
Pentru a primi automat in JavaScript notificari de la server, definiti un obiect EventSource, cu adresa URL a fisierului de pe server.

Sintaxa:
var evsource = new EventSource('sse_file.php');

Daca fisierul e pe alt domeniu, definiti EventSource cu adresa acelui fisier, si un al doilea argument cu un obiect cu proprietatea withCredentials setata true (default e false).
Sintaxa:
var evsource = new EventSource('//api.example.com/sse_file.php', {withCredentials: true});

Dupa ce ati creat obiectul cu EventSource, se poate receptiona mesajul de la server prin evenimentul message:
var evsource = new EventSource('sse_file.php');
evsource.addEventListener('message', (ev)=>{
 //preia notificarea de la server din eveniment (ev)
 let data = ev.data;
});

Fiecare eveniment message are aceste proprietati:

Trimitere eveniment message de la server

Scriptul de la server care trimite evenimente stream trebuie sa transmita header-ul Content-Type: text/event-stream.
Fiecare eveniment 'message' e transmis ca text cu unul sau mai multe linii, terminat cu doua linii goale.
Sintaxa (in PHP):
header('Content-Type: text/event-stream');
echo "data:$data\n";
echo "retry:$retry\n";
echo "id=$id \n\n";


Sirul intreg cu mesajul trebuie sa se termine cu doua linii goale '\n\n'.
Daca sirul incepe cu caracter doua-puncte (:), e considerat un comentariu si e ignorat.
echo ': Text ignored \n\n';
Daca sirul nu contine caracter doua-puncte, intreaga linie este tratata ca numele campului cu un sir de valori goale.

Exemplu cu eveniment de la server in JS

Iata un exemplu simplu care ajuta sa intelegeti cum functioneaza evenimentele de la server cu obiectul EventSource.
- Acest exemplu afiseaza intr-un element HTML timpul (ora:minute:secunde) transmis de la server.
<h3>Exemplu eveniment de la server cu EventSource</h3>
<h4>Server-Time: <span id='ss_time'></span></h4>

<script>
var ss_time = document.getElementById('ss_time');

//daca browser-ul suporta EventSource
if(window.EventSource){
 //defineste un obiect EventSource object care sa primeasca date de la sse_ex.php
 var evsource = new EventSource('javascript/sse_ex.php');

 //receptioneaza datele de la server
 evsource.addEventListener('message', (ev)=>{
 let id = ev.lastEventId; //in caz ca e necesar id-ul mesajului

 //preia si adauga data in #ss_time
 let data = ev.data;
 ss_time.innerHTML = data;
 });
}
else ss_time.innerHTML ='No server-sent events support.';
</script>
Sintaxa pentru evenimentele stream de la server e simpla. Intai setati header-ul 'Content-Type' cu valoarea 'text/event-stream', apoi se pot transmite evenimentele stream cu 'echo' (in PHP).
- Fisierul sse_ex.php contine acest cod:
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); //ca sa nu adauge datele in cache la browser
header('Access-Control-Allow-Origin: *'); //permite acces stream doar de pe domeniu actual

$time = date('h:i:s');
$id = time(); //sa seteze id-ul cu timestamp-ul curent

//transmite evenimentul cu un interval de timp de 1 secunda (1000 milisecunde)
echo "data:$time\n";
echo "retry:1000\n";
echo "id=$id \n\n";

//trimite datele la browser
ob_flush();
flush();

Terminare evenimente streams

In mod implicit, daca conexiunea dintre client si server se inchide, conexiunea este resetata.
Pentru a termina complet conexiunea de pe partea de client, aplicati metoda close().
var evsource = new EventSource('sse_file.php');
//restul codului..

if(conditie) evsource.close();

Pentru a termina complet conexiunea de pe partea de server, transmiteti fara header "text/event-stream" Content-Type, sau returnati un status HTTP diferit de 200 OK (ex. 404 Not Found).
header('HTTP/1.0 404 Not Found');
exit();
- Va impiedica browserul sa restabileasca conexiunea.

Utilizare nume personalizat pentru evenimentul trimis de server

Cuvantul 'message' e numele implicit pentru evenimente stream de la server, dar se poate specifica si alt nume, adaugand campul event in textul transmis la browser.
Sintaxa (in PHP):
echo 'event:event_name\n';
echo "data:$data\n";
echo "retry:$retry\n";
echo "id=$id \n\n";

Iar pe partea de client, scriptul JS poate receptiona evenimentul specificat:
var evsource = new EventSource('sse_file.php');
evsource.addEventListener('event_name', (ev)=>{
 //preia notificarea de la server din eveniment (ev)
 let data = ev.data;
});
- Acest cod va fi apelat automat cand serverul trimite un mesaj cu numele de eveniment "event_name".

Un Test simplu in fiecare zi

HTML
CSS
JavaScript
PHP-MySQL
Engleza
Spaniola
Ce tag se foloseste pentru a crea o caseta de adaugare text?
<form> <input> <div>
<input type="text" name="a_name" value="val" />
Ce proprietate CSS se foloseste pentru a afisa textul cu majuscule-mici?
display font-variant font-style
h3 {
  font-variant: small-caps;
}
Ce instructiune afiseaza o fereastra cu un mesaj in ea?
for() Date() alert()
var msg = "Viziteaza CoursesWeb.net";
alert(msg);
Indicati codul PHP prin care se obtine IP-ul utilizatorului.
$_SERVER["HTTP_USER_AGENT"] $_SERVER["REMOTE_ADDR"] $_GET[]
$ip = $_SERVER["REMOTE_ADDR"];
echo $ip;
Cum se traduce cuvantul "actually"?
actual de fapt acum
He actually came on time.
- De fapt, el a venit la timp.
Cum se traduce expresia: "Hace buen tiempo"?
Face timp E vreme frumoasa Drum bun
Hoy hace buen tiempo.
- Astazi e vreme frumoasa.
Utilizare EventSource pentru evenimente de la server

Last accessed pages

  1. HTM5 canvas (4206)
  2. De lo espiritual en EspaƱol - Din cele Spirituale in Spaniola (766)
  3. Limba spaniola curs online incepatori si avansati (31294)
  4. Script Utilizatori - Inregistrare si Autentificare / Logare (2350)
  5. Trecut perfect si Trecutul perfect continuu - Past perfect and Continuous (58238)

Popular pages this month

  1. Cursuri si Tutoriale: Engleza, Spaniola, HTML, CSS, Php-Mysql, JavaScript, Ajax (735)
  2. Curs HTML gratuit Tutoriale HTML5 (399)
  3. Coduri pt culori (369)
  4. Gramatica limbii engleze - Prezentare Generala (350)
  5. Exercitii engleza - English Tests and exercises - Grammar (333)