Bonjour,
J'ai mis en ligne ce que j'ai déjà fait à
http://jeudego.org/play. On ne peut pas jouer de partie contre soi-même, mas il suffit de se créer 2 comptes et de se connecter avec chaque compte dans un navigateur différent pour pouvoir tester. On peut aussi suivre des parties en cours jouées par d'autre sans avoir besoin de compte (mais bon, évidemment, pour l'instant, personne ne joue vu que personne ne sait que ça existe : c'est le vide sidéral).
Je pense que ce n'est pas très bon de stocker les informations dans des fichiers : dans le cas présent, ton hébergeur pourrait te haïr, et tu vas probablement lui remplir ses logs à grande vitesse. Ce serait bien mieux de faire le stockage dans une base de données, parce que c'est "étudié pour" !
Pour éviter les collisions, il me semble qu'il suffit que chaque joueur ne puisse jouer qu'avec une couleur !
Pour ce qui est du format de données, j'utilise le sgf pour envoyer les données au serveur et les stocker dans la base de données. Il n'est pas trop gourmand en espace mémoire, et surtout, tôt ou tard, on doit exporter les données dans ce format, donc autant s'en servir le plus tôt possible. Note que pour une partie en train de se jouer, avec une seule branche de coups, le sgf est un format "append go format". Bref, je te conseille "travailler" en sgf autant que tu le peux et au plus tôt : ça ne sera pas du temps de perdu !
Je n'ai par contre pas du tout optimisé les échanges entre les clients et le serveur (j'utilise AJAX qui est désormais une technique robuste pour balader le sgf partout là où on en a besoin). Le fait de tester s'il y a un changement ou pas et de ne transmettre les données que s'il y en a un ne change pas grand chose au problème de fond : pour faire le test, on est obligé de faire un échange de données entre le serveur et les clients, et ces échanges seront nombreux (si tu n'as ne serait-ce que quelques dizaines d'utilisateurs présents, ces échanges seront en nombre du même ordre de grandeur qu'un site qui a 100 000 visiteurs/jour). Envoyer un octet d'information utile pour demander le test et y répondre ou les quelques centaines d'octets d'un sgf entier, c'est presque pareil vu qu'à chaque échange, y aura les entêtes à envoyer dont le poids sera du même ordre de grandeur que le sgf lui-même. Ceci étant, c'est une très bonne idée de se baser sur l'heure pour détecter s'il y a des mises à jour.
Pour optimiser les échanges, il faut surement en premier lieu chercher à diminuer leur nombre plutôt que leur taille, par exemple en augmentant le temps entre deux tests entre le serveur et un client en cas d'inactivité de ce client (et aussi "déconnecter" complètement les clients inactifs au bout d'un certain temps, c'est à dire faire en sorte que leur navigateur arrête de demander au serveur s'il y a du nouveau). Par contre, pour les clients hyperactifs, 5 secondes, c'est surement trop long.
PS : mes sources sont téléchargeables à
http://jeudego.org/gos/_gos6/download.php (prendre la 601b).