Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/09/2011, 09h27   #1
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
Par défaut Push Javascript avec serveur PHP

Bonjour à tous,

En ce moment, je réalise un petit jeu RPG à cases avec un serveur PHP et un client JavaScript utilisant jQuery.

Je me heurte à un problème : pour récupérer par exemple les positions des autres joueurs, et ainsi permettre aux joueurs de se voir interagir sur la map entre eux, je dois passer par une récupération AJAX de la liste des positions des joueurs connectés toutes les n secondes.

Ceci interroge un fichier PHP qui liste les joueurs connectés, récupère toutes leurs positions et le renvoie sous format JSON.

C'est lourd pour mon petit serveur perso chez OVH. Et surtout, ca lui donne souvent du travail pour rien (une requête est envoyée en l'air si personne n'avait bougé...).

On m'avait proposé des alternatives : passer par un serveur "push".
J'ai essayé par exemple BeaconPush ou encore PubNub, des services en ligne.

J'aimerai maintenant pouvoir passer par un serveur à moi (mon ordinateur par exemple). J'aimerais avoir le schéma suivant :

- Quand un joueur se déplace, le serveur PHP envoie la nouvelle position à mon serveur
- Mon serveur push la nouvelle position au client javascript
- Le client réceptionne les nouvelles coordonnées et met à jour la position de ce joueur sur la map.

En résumé, je cherche donc à installer sur mon ordinateur un serveur pour pouvoir recevoir des données de mon serveur PHP mutualisé et les push au client JavaScript.

En connaissez-vous ?
Ou me conseillez-vous autre chose ?

Merci d'avance pour votre aide et vos conseils !
Cawrotte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 10h08   #2
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
salut,

tu peux monter un serveur web sur ta bécane A.
Le serveur ovh appel ta page web de A avec en paramètres les positions des joueurs ayant bougé.
Ta bécane met à jour ses infos.

Chaque joueur récupère la position des autres par ajax sur ta bécane.

Il y a moyen de se faire plaisir avec les websockets, mais je connais pas du tout l'avancement. En revanche, c'est typiquement le pull (coté client) dans lequel tu es
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 10h18   #3
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
En effet, ca peut être une bonne solution pour commencer, mais ce n'est pas durable, car il y a toujours des requêtes dans le vent (sauf que la c'est moi qui vais payer l’électricité )

Plus sérieusement, j'ai une préférence pour le push car c'est vraiment tu temps réel et pas de l'actualisation toutes les 5 secondes. Je regardai à l'instant http://www.ape-project.org/

Ca m'a l'air très intéressant mais je ne sais pas comment est fait le serveur, apparemment c'est du C, mais je n'ai jamais tapé une ligne de C...

Sinon j'ai vu node.js, mais je ne vois pas, dans tous les cas, comment les lier à mon serveur PHP
Cawrotte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 13h40   #4
Invité de passage
 
Homme
Étudiant
Inscription : septembre 2011
Messages : 3
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2011
Messages : 3
Points : 0
Points : 0
Il n'existe pas des serveurs tout faits qui reçoivent des sockets et push ?
Cawrotte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/09/2011, 16h13   #5
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
re,

je viens de faire mumuse (stupidement) avec node, ca fait entre autre ce que tu désires.
Jor ton client ouvre une socket avec le serveur, côté serveur, tu peux pusher quand tu le désires, et côté client, tu récupères l'info quand le serveur push.

Ca donne un code très simple genre côté client :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<html>
    <head>
 
<script src="/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost');
  socket.on ('connect', function (data) {
    console.log('connected');
    socket.emit('getPosition');
  });
  socket.on('updatePosition', function(data){
    console.log(data);
  });
</script>
<style type="text/css">
</style>
</head>
<body>
<div id="output">
 
</div>
</body>	
</html>
et côté serveur :
Code :
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
var app = require('http').createServer(handler)
  , io = require('socket.io').listen(app)
  , fs = require('fs')
 
app.listen(80);
 
function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }
    res.writeHead(200);
    res.end(data);
  });
}
io.sockets.on('connection', function (socket) {
  socket.on('getPosition', function (data) {
    pushData();
  });
  var i=0;
  function pushData(){
    socket.emit('updatePosition', { position: i++ });
    setTimeout(pushData,4000);
  }
});
ce qui rappèle les workers du html5.

bon, c'est du code pompé chez socket.io, qui permet justement ces push, en tant que module pour node.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h42.


 
 
 
 
Partenaires

Hébergement Web