Bonjour,

Merci à vous de vous pencher sur mes problèmes :-)

Problèmes
  1. mon client JS reçoit des notifications du serveur SSE même si ce dernier n'a rien à envoyer
  2. pourquoi les timestamp fonctionnent en $_SESSION et pas en $GLOBALS ?


Client side (JS)
Le client JS s'abonne à un serveur SSE et traite ses messages :
Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
function serverPushOk()
{	// Le client JS s'abonne au serveur SSE en donnant son ID et le code de son PROFILE
	_sseSource=new EventSource("sseServer.php?cmd=9&userId="+_$store.sysGet("userId")+"&userProfile="+_$store.sysGet("userProfile"));
	// Traitement d'un message SSE en provenance du server
 	_sseSource.onmessage=function(event)
	{	// Ici, on reçoit la liste des tables à mettre à jour
		// Elles le seront à la prochaine connexion dont on profitera pour envoyer les mises à jour à faire dans les tables du serveur
		...code...
	};
}

Server side (PHP)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
	// 1. on interroge la base de données pour avoir le timestamp de chaque table
	...code...
	session_start();
	// 2. si $_SESSION de la table n'existe pas ou que le timestamp des bases de données est plus récent que celui de $_SESSION de la table, on ajoute le nom de la table à $update
	...code...
	header("Access-Control-Allow-Origin: *");
	header("Content-Type: text/event-stream");
	header('Cache-Control: no-cache');
	if($update!='')
	{	echo 'data: '.$update."\n\n";
	}
	session_write_close();
	sleep(20);
?>
Problème 1
Le client JS reçoit un event toutes les 20 secondes = sleep(20) même s'il n'y a aucune mise à jour de tables. Il ne traite pas puisque qu'il n'y a pas de event.message mais cela consomme-t-il de la data pour le client ?
Si je déplace les header() dans le bloc if($update!=''), le script ne fonctionne plus
Problème 2
Le client JS fait périodiquement des appels Ajax pour mettre à jour des tables sur le serveur. Mon idée était de mettre le dernier timestamp d'une table modifiée en $GLOBALS pour éviter une requête base de données pour récupérer les timestamp.
C'est manifestement une idée à la c*n puisque cela ne fonctionne pas (mais c'est ok en $_SESSION). Je suis sur un serveur mutualisé, il se peut que cela apporte un élément de réponse.

Merci de votre attention et de vos éventuels retours.