Page 1 sur 2

Websocket et PHP

Posté : 24 août 2011, 18:19
par stealth35
Depuis quelque temps je fais des tests avec les Websocket, et je suis plutôt convaincu par le systèmes, pour ceux qui ne le savent pas les Websocket c'est un peu comme de l'AJAX mais en flux continu, ceux qui veut dire que vous n'avez pas à rafraichir la page ou faire des requêtes AJAX tout les X temps pour avoir des informations.

L’inconvénient ici est que l'on a besoin d'un serveur Websocket, pas de panique il en existe des gratuits par exemple Nodester : qui est simplement un hébergeur Node.js
On peux donc creer en quelques lignes (5) un serveur Websocket

Et que vient faire PHP la dedans ?


Le Websocket c'est plutôt entre le client web et le serveur, et bien ici PHP va servir lui aussi de client grâce à la classe WebSocket :mrgreen: (attention c'est très expérimental), et socket.io-client pour le client

L’intérêt de cette classe est de fournir des informations que seul un serveur pourrait fournir, comme par exemple un traitement terminer.

Exemple :

serveur.php
set_include_path('../Stdlib/library' . PATH_SEPARATOR . get_include_path());
spl_autoload_register();

$handcheck = file_get_contents('http://stealth35.nodester.com/socket.io/1');
list($sid) = explode(':', $handcheck);

$text = empty($_GET['m'])  ? 'server' : $_GET['m'];

$socket = new Stdlib\WebSocket("ws://stealth35.nodester.com/socket.io/1/websocket/$sid");
$message = '5:::' . json_encode(array('name' => 'server', 'args' => array('message' => 'hello form ' . $text)));
$socket->send($message);
$socket->close();
client.html
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/prototype/1.7.0.0/prototype.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/scriptaculous/1.9.0/scriptaculous.js"></script>
<script type="text/javascript" src="node_modules/socket.io-client/dist/socket.io.js"></script>
<div id="messages"></div>
<script type="text/javascript">
  var socket = io.connect('http://stealth35.nodester.com');
  socket.on('server', function(data) {
    var p = new Element('p', { 'class': 'message'}).update(data.message);
    $('messages').insert(p);
    p.highlight();
  });
</script>
server.js (juste pour info)
var express = require('express');
var io = require('socket.io');

var app = express.createServer()
  , io = io.listen(app);

app.listen(8000);

io.sockets.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('server', function (data) {
    socket.broadcast.emit('server', data);
  });
});
A chaque fois que le client se lancera (rajouter ?m en paramètre si vous voulez), tout les navigateurs afficheront le nouveau message, et le must c'est que socket.io prend aussi en charge les navigateur ne supportant pas les websocket (via flash, ou AJAX)

Pour le moment je laisse le serveur tel quel pour les tests il changera a l'avenir, Nodester est gratuit si vous voulez faire vos tests

Re: Websocket et PHP

Posté : 24 août 2011, 18:43
par popy
A noter que les websockets ne fonctionnent pas à travers de nombreux proxys, mais que socket.io les prend en charge au même titre que les navigateurs (de mémoire).

Mais ton websocket php, il fork / thread ?

Re: Websocket et PHP

Posté : 24 août 2011, 18:49
par stealth35
c'est qu'une classe cliente pour une utilisation limitée (simple envoie de donnée, on ne reçoit rien, la connexion se ferme quand le script est terminé), socket.io par contre c'est qu'un seul thread donc on peux si on veux enregistrer tout les clients
var clients = [];
io.sockets.on('connection', function (socket) {
  clients.push(socket);
});

Re: Websocket et PHP

Posté : 25 août 2011, 10:46
par popy
Ah mais j'avais mal saisi, le serveur.php est en fait un client qui pousse les infos à travers le websocket en node ?

Re: Websocket et PHP

Posté : 25 août 2011, 10:54
par stealth35
Ah mais j'avais mal saisi, le serveur.php est en fait un client qui pousse les infos à travers le websocket en node ?
oui, c'est vrai que c'est peu être mal nommé, c'est plus le client coté serveur :-k

je ferai un autre post pour montrer comment faire un serveur websocket mais en PHP

Re: Websocket et PHP

Posté : 25 août 2011, 12:26
par popy
gogo mongrel2 !

Re: Websocket et PHP

Posté : 12 juil. 2012, 16:03
par brian85
Bonjour,

Je viens déterrer ce post car j'ai vraiment besoin de ces websockets j'ai essayé la solution du projet phpwebsocket mais il semble que le projet ait un temps de retard sur l'évolution de la RFC le code fait référence à la ligne 150 du server.php à une "Sec-WebSocket-Key2" qui est obsolète dans la rev 13 du protocole (j'ai deviné qu'il y avait un problème en ouvrant la console de chrome qui visiblement attend autre chose)

Quelqun a-t-il une solution pour faire marcher ce truc ?

PS : j'ai jamais touché à node.js et bon mettre ça en place sur mon serveur de prod me fait un peu peur je préfèrerais voir fonctionner ce script php de ses propres ailes.

Merci d'avance pour votre aide

Re: Websocket et PHP

Posté : 12 juil. 2012, 19:19
par momox
Bonjour,

Je viens déterrer ce post car j'ai vraiment besoin de ces websockets j'ai essayé la solution du projet phpwebsocket mais il semble que le projet ait un temps de retard sur l'évolution de la RFC le code fait référence à la ligne 150 du server.php à une "Sec-WebSocket-Key2" qui est obsolète dans la rev 13 du protocole (j'ai deviné qu'il y avait un problème en ouvrant la console de chrome qui visiblement attend autre chose)

Quelqun a-t-il une solution pour faire marcher ce truc ?

PS : j'ai jamais touché à node.js et bon mettre ça en place sur mon serveur de prod me fait un peu peur je préfèrerais voir fonctionner ce script php de ses propres ailes.

Merci d'avance pour votre aide
Peux tu donner l'erreur compléte ?

Re: Websocket et PHP

Posté : 13 juil. 2012, 10:11
par Berzemus
J'ai un gros doute sur cette phrase :
j'ai vraiment besoin de ces websockets
Les websockets sont une technologie en devenir. en avoir "vraiment besoin" à ce moment-ci c'est comme avoir vraiment besoin d'un réseau 40GbE.

Bref, en dehors des projets expérimentaux ou vraiment particuliers/avancés, je doute qu'on puisse avoir réellement besoin des websockets, au point de ne pas pouvoir considérer les possibles alternatives.

Ceci dit, on peut t'aider à choisir la technologie utilisable la plus adaptée à ton projet, si tu nous l'explique un peu.

Re: Websocket et PHP

Posté : 15 juil. 2012, 22:13
par Pinpin
Bonjour,

Je cherche moi aussi à utiliser les websockets, mais je ne suis pas encore certain que ça soit la solution la plus adéquate, donc vous pourrez peut-être me conseiller : je cherche à créer un jeu multi-joueurs (jusqu'à 100 en simultané) qui se déroule en temps réel, chaque joueur doit recevoir des informations depuis le serveur environ toutes les 500 millisecondes, 1 seconde max... il y a derrière ça des accès à une base de données mysql, et je crains que ça ne fasse beaucoup de connections à la bdd avec des appels aussi fréquents.

Y a t'il une méthode mieux adaptée que les websockets pour ce genre d'application ?

Re: Websocket et PHP

Posté : 16 juil. 2012, 15:16
par brian85
Bonjour,

Oui j'ai vraiment besoin des websockets dans un contexte très particulier, des personnes vont remplir un formulaire de réservation avec une personne au téléphone il se peut que au moment où cette personne remplit ce formulaire, il ne reste plus de places disponibles et donc que on ne puisse honorer sa réservation, il serait bête d'attendre d'avoir tout rempli pour dire à la personne en ayant cliqué sur la validation "ah bah non c'est pas possible..." une tempo avec requete ajax c un peu cradouille, voilà pourquoi je souhaiterais mettre en place ceci.

Pour info y a pas de msg le status reste à 0 et disconnected status 3 à la ligne en dessous dans le client fourni

Ce que je constate c'est que le handshake est différent de celui implémenté et ne correspond pas à la version 13
chrome reçoit en key3: 00:00:00:00:00:00:00:00
j'avoue mes limites là...
quelqu'un arrive-t-il à faire fonctionner ce truc ?

Merci d'avance

Re: Websocket et PHP

Posté : 16 juil. 2012, 17:56
par xTG
Des systèmes font cela depuis des années et ce sans websocket. O_o
Le principe est de réserver un slot à l'ouverture du script.
Et suppression des slots réservés qui sont inactifs depuis X temps lorsqu'on cherche à obtenir un slot.
C'est une simple gestion de timeout.
Bouffer du socket pour ça dites donc...

A moins que tu ai besoin que le slot soit désengagé dans la milliseconde je ne vois absolument pas l'intérêt d'utiliser une telle technologie.

Re: Websocket et PHP

Posté : 17 juil. 2012, 15:24
par brian85
Bonjour, je ne peux pas expliquer tous les tenants et les aboutissants de mon contexte ce serais trop long, pour info j'ai trouvé une implémentation qui fonctionne parfaitement avec la revision 13 du protocole à cette adresse : http://www.flynsarmy.com/2012/02/php-we ... ation-2-0/
Le projet hébergé sur google code semble à l'abandon c'est bien dommage car cette techno est vraiment prometteuse, mais difficile à appréhender je trouve.
Merci pour votre aide, je crois que vous pouvez tagger [résolu].

Re: Websocket et PHP

Posté : 18 juil. 2012, 10:00
par Berzemus
Disons que, pour qu'une techno soit réellement utilisable sur le web, il faut qu'elle soit intégrée dans la majorité des navigateurs (et ce depuis assez de générations pour qu'une majorité d'utilisateurs puisse l'avoir à disposition).

IE 10 l'intégrera peut-être, mais il faudra attendre que IE 6, 7, 8 et 9 aient disparus des radars pour être sur de pouvoir l'employer.

Re: Websocket et PHP

Posté : 18 juil. 2012, 11:09
par Nagol
Disons que, pour qu'une techno soit réellement utilisable sur le web, il faut qu'elle soit intégrée dans la majorité des navigateurs (et ce depuis assez de générations pour qu'une majorité d'utilisateurs puisse l'avoir à disposition).

IE 10 l'intégrera peut-être, mais il faudra attendre que IE 6, 7, 8 et 9 aient disparus des radars pour être sur de pouvoir l'employer.
IE est un navigateur minoritaire maintenant, IE 6 et 7 (particulièrement le 7) ont disparu et sont négligeables. Pour le reste la politique de versioning de Chrome et firefox font qu'il est compliqué de supporter une version N-1 et je pense qu'à terme si IE ne fait pas pareil (maj silencieuse en background à la dernière version quelque soit l'OS) il est amené à perdre encore plus de part de marché voir à juste disparaître parce que chrome est tranquillement mais surement en train de devenir le leader à suivre du monde des browsers.