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
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