Aller au contenu

Jeux multijoueurs


jeremanemo

Sujets conseillés

Bonjour je cherche à faire un jeux dans lequel les membres s'affronteront les uns contre les autres.

Seulement je ne sais pas comment faire communiquer deux machines entre elles(ou en passant par le serveur).

J'ai entendu parler de la possibilité d'un serveur flash, seulement je n'ai pas d'expérience avec ce genre d'infrastructure.

Alors avant de me lancer la dedans par obligation, je voudrais savoir si il existe une alternative.

Merci d'avance pour vos réponses.

Lien vers le commentaire
Partager sur d’autres sites

A mon avis, il faudrait passer par le serveur : tu enregistres chaque action dans ta base de données, actions que tu télécharges régulièrement sur chaque client.

Par contre, cela implique que tu ne fasses pas de temps réel, mais plutôt du tour par tour (Quel que soit le temps que tu alloues pour chaque tour)

Lien vers le commentaire
Partager sur d’autres sites

Merci pour votre réponse,

c'est justement ça le problème ^^, c'est un jeux de voiture en temps réels.

Et j' ai déjà essayer de charger des fichiers textes X fois par sec mais j'ai peur de surcharger le serveur.

Lien vers le commentaire
Partager sur d’autres sites

Le souci, c'est que si tu ne veux pas ruiner ta bande passante en appels de coordonnées pour tous tes concurrents en lice, il te faut des algorithmes prédictifs, qui estimeront en fonction de certains paramètres (vitesse de la voiture, position, etc) le comportement que pourrait avoir le joueur. Ca peut aussi occasionner pas mal de bugs lors de la synchronisation (voitures qui avancent de 10 mètres d'un coup, par exemple). C'est loin d'être facile ;)

Lien vers le commentaire
Partager sur d’autres sites

Je suis bien d'accord avec vous ^^. Donc sauf serveur flash il n'y aurait pas de solution convenable pour le temps réel?

Merci encore.

Modifié par captain_torche
Inutile de citer le message précédent; on vient de le lire.
Lien vers le commentaire
Partager sur d’autres sites

Hello,

Passer des coordonnées ne posera à priori pas trop de problème de connexion une fois l'appli chargée. Pour ton truc, tu as la solution d'utiliser un serveur dans le langage que tu souhaites (j'en avais fais un en c# à une époque) et communiquer avec ce serveur en socket. Ca t'évitera de sortir l'artillerie lourde d'un Red5 pour faire uniquement fonctionner un jeu.

Sinon, combien de joueurs à ton appli ? 2 ou plus ? S'il sont uniquement 2 il y a peut être mieux à faire.

Lien vers le commentaire
Partager sur d’autres sites

Merci pour ta réponse.

Je pensais utilisé aquaserver. T'en pense quoi?

Sinon je pensait commencer par du tour par tour (2-4 joueurs), puis du temps réel à deux joueurs, puis plus.(J'ai beaucoup de jeux à faire :P )

Si tu as une autre solution je t'écoute attentivement.

Merci

Lien vers le commentaire
Partager sur d’autres sites

Aquaserver est un serveur de socket ? pourquoi pas s'il est fiable, il en vaut surement un autre, ça revient au même que de le coder, autant ne pas refaire ce qui existe déjà :)

Sinon peut-être vaut -il mieux directement passer par une solution faite pour flash :

- red5 : pas si chiant à installer qu'on le dit, et franchement pas mal

- smartfoxserver : payant et supercomplet (pas très cher)

- FMS : super si t'as les moyens

L'avantage d'utiliser ce type de serveur est que tu peux passer des objets flash sans t'embêter à formater des chaînes dans ton code. Tu peux aussi faire un serveur socket simple en PHP, tiens, voici ce que j'avais utilisé, j'avais préféré le décliné en c# pour gérer des thread, mais il est utilisable en l'état.

Le principe, il récupère les infos que tu envoi d'un client et effectue un broadcast, enfin tu vois l'idée.


<?php
set_time_limit(0);
$adresse = 'xxx.xxx.xxx.xxx';
$port = xxxx;
$conn = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_set_option($conn, SOL_SOCKET,SO_REUSEADDR, 1);

$ret = socket_bind($conn, $adresse, $port);

$ret = socket_listen($conn, 5);

$aSoc = array($conn);

while (true)
{
$soc = $aSoc;
socket_select($soc, $write = NULL, $except = NULL, NULL);
foreach($soc as $s)
{
if ($s == $conn)
{
if (($client = socket_accept($conn)) < 0) continue;
else array_push($aSoc, $client);
}
else
{
$flux = socket_recv($s, $buffer, 2048, 0);
if ($flux == 0)
{
$i = array_search($s, $aSoc);
unset($aSoc[$i]);
socket_close($s);
}
else
{
$acs = $aSoc;
array_shift($acs);
cbroadcast($acs, $s, $buffer);
}
}
}
}

function cbroadcast($cls, $s, $datas)
{
foreach($cls as $c)
{
socket_write($c, $datas);
}
}
?>

En cherchant un peu tu trouveras facilement des trucs analogues en perl ou python, ce sera peut-être plus efficace si tu as beaucoup de jeux. Mais mon sentiment est que tu devrais passer sur red5 ou un FMS, tu gagnerais du temps à développer tes jeux je pense et il y aura moins de traitement côté client.

Lien vers le commentaire
Partager sur d’autres sites

  • 1 month later...

Bonjour à tous et à toutes, aujourd'hui je me suis enfin décidé, je souhaite utiliser red5.

Cependant je voudrais savoir si il est possible d'installer red5 sur mutualisé pour faire des tests, à terme il sera bien entendu sur dédié.

Merci beaucoup

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...