2010-12-14 8 views
0

J'ai un script PHP qui ouvre une connexion socket (en utilisant fsockopen) et prend environ 15secs pour compléter/renvoyer le résultat au navigateur. Pendant ce temps, si le navigateur envoie une deuxième requête, il est sérialisé. Cela donne une mauvaise expérience utilisateur parce que si l'utilisateur clique 3 fois, alors la troisième requête qui est envoyée après 30sec est celle qui obtient la réponse - les 2 premières demandes du navigateur prespective sont perdues.Connexions TCP simultanées TCP du même navigateur

Je n'ai aucune session dans mon script, mais j'ai essayé de mettre session_write_close() au début de mon script qui n'a pas aidé.

session.auto_start également dans le php.ini = 0.

Toutes les idées quant à la façon de faire les demandes des clients du même parallèle du navigateur ??

Merci Gary

+0

Il s'agit de la façon dont vous initiez les connexions à partir du client, pas ce qui est sur votre serveur. C'est une question JavaScript/websockets, pas PHP. –

+0

Avez-vous utilisé stream_context_create(). Modifiez votre question et ajoutez une partie de code pour avoir plus d'idée sur le problème. – Manu

Répondre

1

1) Télécharger et installer Firefox

2) Téléchargez et installez Firebug

3) Ajouter un sleep(10) à votre script PHP pour qu'il se met en pause pendant quelques secondes avant de revenir sa réponse

4) Ouvrez votre page Web et regardez les connexions sortantes avec Firebug. Vous devriez en voir plusieurs qui sont ouverts et n'ont pas encore de réponse. Ils devraient tous revenir à peu près au même moment, quand chacun finit le délai de 10 secondes.

Si vous ne voyez pas plusieurs connexions ouvertes en même temps et que vous revenez à peu près en même temps, vous devez regarder votre code frontal. Les requêtes AJAX sont asynchrones et peuvent s'exécuter en parallèle. Si vous les voyez fonctionner en série, cela signifie que vous devez corriger votre code JavaScript, pas n'importe quoi sur le serveur.

Parallel asynchronous Ajax requests using jQuery

+0

J'ai analysé les paquets wireshark et je vois que la prochaine requête ne sort du navigateur qu'après avoir reçu une réponse de la requête précédente. Donc, cela semble être un problème client. Merci à tous pour les réponses. Je vous tiendrai au courant de mes conclusions. – Gary

0

Vous devriez si possible installer (* nix) redis.

Pour installer simplement faire simple,

make 

Avec lpush/brpop vous pouvez gérer ce genre de choses de manière asynchrone et garder intact l'ordre. Si vous générez deux threads de travail, vous pouvez même gérer plusieurs requêtes simultanément. la bibliothèque client predis est assez solide

Questions connexes