Bonjour,

J'ai créé une application web, dont tous les liens ne fonctionnent qu'en Ajax: la page n'est jamais rechargée, et toutes les fonctions JavaScripts sont chargées au départ.
J'ai rajouté un chat, qui fonctionnait correctement jusque-la en faisant une requete réguliere sur une table de ma base. Mais c'est lourd, et je souhaite le modifier pour utiliser les sockets.
J'ai fait un test qui fonctionne, mais lorsqu'il s'agit de l'intégrer a mon site, gros probleme: en effet, l'execution du script de connection a la socket (pour la réception des nouvelles données) ne s'arrete jamais, et en conséquence, mon browser ne veut plus charger aucun script tant que le précédent - celui qui se connecte a la socket - n'a pas fini de s'éxécuter.

Mon objet XMLHttpRequest est tout simple, asynchronous et il renvoie sa réponse sur ReadyState=3.

Voici ma fonction JavaScript:
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
16
17
18
19
20
21
22
 
function bbnjs_chat_reception(){
	var div = myTop.document.getElementById('bbn_chat_text');
	var myajax = new top.window.bbnjs_ajax_object();
	var method   = "POST";
	var filename = "../inx/reception.php";
	var request  = "user=<?php echo $_SESSION['bbn_user']['bbn_login']; ?>";
	var str_length = 0; //number of received characters
	var update = function(){
		if( myajax.readyState == 3 && myajax.responseText.length > str_length ){
			str_length = myajax.responseText.length;
			var response = myajax.responseText;
			myTop.document.getElementById('bbn_chat_text').innerHTML = response;
			div.scrollTop = div.scrollHeight;
		}
	};
	setTimeout(update,100);
	update();
	myajax.open(method, filename, true);
	myajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	myajax.send(request);
}
Et voici le 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
16
17
18
19
20
21
22
23
24
25
26
27
28
 
<?php
set_time_limit(0);
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ( @socket_connect($socket,'127.0.0.1',35353) )
	{
		$stream = array();
		$stream['bbn_connect'] = 1;
		$stream['bbn_user'] = $_SESSION['bbn_user']['id'];
		$stream = serialize($stream);
		socket_write($socket,$stream,strlen($stream));
		while ( true )
			{
				if( $input = @socket_read($socket,4096) )
					{
						if ( strlen($input) > 0 )
							{
								$output = unserialize($input);
								echo $output;
								flush();
							}
					}
				else
					{ echo socket_strerror(socket_last_error()); break; }
			}
		socket_close($socket);
	}
?>
Merci de votre aide!

Thomas

PS: Je ne sais pas si ce probleme peut se solutionner juste par Ajax, ou par PHP, mais dans tous les cas je pense que c'est sur ce forum que vous etes le plus susceptible de connaitre le fonctionnement des sockets.