Je développe un jeu d'échecs multijoueurs à l'aide de Node JS avec socket.io. Le jeu affiche bien dans le fichier index.html et fonctionne correctement sur le serveur lorsque je l'exécute sur localhost: 8080. Cependant, les mouvements d'échecs ne sont pas soumis à l'autre joueur, même si je faisais tout ce qui est juste. Qu'est-ce qui manque? J'ai une socket.io installé correctement
J'ai essayé de ré-regarder le tutoriel sur YouTube encore et encore pour repérer mon erreur, mais je ne peux pas. J'ai tout fait en conséquence. J'ai dû louper quelque chose. Voici le lien https://www.youtube.com/watch?v=Affqigjo7fq&t=1621s p>
EDIT P>
Voici le lien vers le didacticiel sur la construction du jeu d'échecs multijoueur http://dwcares.com/2015/10/21/realchess/ p> ci-dessous est mon serveur Fichier P> var express = require('express');
var app = express();
app.use(express.static("[ublic]"));
var http = require("http").Server(app);
var path = require('path');
var public = path.join(__dirname, 'public');
var io = require("socket.io")(http);
// viewed at http://localhost:8080
app.get('/', function(req, res) {
res.sendFile(path.join(public, 'index.html'));
});
io.on('connection', function(socket){
console.log('a user has connected');
socket.on("message", function(msg) {
console.log("Message from client: "+ msg);
});
socket.on("move", function(msg) {
socket.broadcast.emit("move", msg);
});
socket.on('disconnect', function(){
console.log('a user disconnected');
});
});
http.listen(8080, function(){
console.log('listening on *:8080');
});
app.use('/', express.static(public));
3 Réponses :
pourrait-il être que Le port HTTP est Pour ce faire, modifiez votre script dans le fichier HTML: p> handlemove code> n'est jamais appelé? Je ne peux pas le voir dans le code que vous avez fourni.
var socket = io.Connect ('http: // localhost'); Code> p>
80 code> par défaut. Essayez de vous connecter à
http: // localhost: 8080 code> p>
var onDrop = function(source, target) {
removeGreySquares();
// see if the move is legal
var move = game.move({
from: source,
to: target,
promotion: 'q' // NOTE: always promote to a queen for example simplicity
});
// illegal move
if (move === null) return 'snapback';
else socket.emit("move", move);
};
Le code de jeu est dans le fichier HTML. Handlemove est appelé dans le fichier HTML. Suis-je supposé l'appeler dans le fichier de serveur aussi?
Vous déclarez une variable de fonction appelée Handlemove dans le fichier HTML. Voir la réponse Helens, qui va probablement résoudre votre problème avec la connexion.
J'ai mis à jour ma réponse, c'est juste après la balise d'ouverture
J'ai fait comme vous l'avez demandé, mais il n'y a toujours aucune communication entre le serveur et le client. Les mouvements d'échecs ne sont pas soumis
Votre Ondrop code> Appels de fonction
Déplacez CODE> sur l'échec de l'échec et vérifie si le déplacement est null. Après que rien ne se passe. Votre
handlemove code> Appels de fonction
socket.emit ("déplacer", déplacer); code> qui devrait envoyer le déplacement à l'autre joueur. Mais qui appelle
handlemove code>?
Je suis confus. Désolé je suis un débutant avec codage
J'ai mis à jour ma réponse à nouveau. Veuillez sélectionner ceci comme réponse acceptée à votre question si cela résout votre problème et cela le fera, je l'ai testé. Vous utilisez également une version très ancienne.IO. Consultez ceci: socket.io/blog/socket-IO-2-0-1-2-0-2-AND-2-0-3
J'ai encore une fois fait comme vous l'avez dit et je ne reçois toujours pas cette connexion. Je suis tellement frustré. Cela vous dérange-t-il si je vous envoie mon code source et que vous l'essayez? Est-ce que ça va si j'ai votre code source et j'essaye le vôtre parce que je deviens paranoïaque et fou ici
Mon email est M.Araqi@live.com si vous pouviez s'il vous plaît envoyez-moi le dossier. Je vais répondre avec le mien
Je t'ai envoyé un mail :)
Avez-vous eu l'email?
Bonjour mrhunchojack! Ma réponse a-t-elle résolu votre problème? Acclamations
var socket = io.connect('http://localhost:8080'); Your server is running on 8080 however you are trying to connect :80. This should fix the problem.
Je ne comprends pas, où dois-je mettre cette ligne de code. le client ou le serveur? Je l'ai mis sur le serveur et j'ai eu une erreur car "io.connect n'est pas une fonction"
@Mrhunchojack Ajoutez ceci à votre client
Je l'ai fait et j'ai remplacé cette ligne de code. Cependant, je n'ai toujours aucune communication entre le client et le serveur. Les coups d'échecs ne se soumettent pas. Cependant, j'obtiens toujours qu'un "utilisateur a connecté" et "utilisateur a déconnecté" message chaque fois qu'un onglet s'ouvre ou se ferme. Qu'est-ce qui se passe
J'ai recréé votre code et j'ai trouvé quelques petites choses nécessitant un ajustement.
p>
var socket = io.connect('http://localhost:8088'); var board = ChessBoard('board', 'start'); var msgButton = $('button'); // $('.msgButton').click(() => { // console.log('Hello'); // }); var board, game = new Chess(); var removeGreySquares = function () { $('#board .square-55d63').css('background', ''); }; var greySquare = function (square) { var squareEl = $('#board .square-' + square); var background = '#a9a9a9'; if (squareEl.hasClass('black-3c85d') === true) { background = '#696969'; } squareEl.css('background', background); }; var onDragStart = function (source, piece) { // do not pick up pieces if the game is over // or if it's not that side's turn if (game.game_over() === true || (game.turn() === 'w' && piece.search(/^b/) !== -1) || (game.turn() === 'b' && piece.search(/^w/) !== -1)) { return false; } }; var onDrop = function (source, target) { removeGreySquares(); // see if the move is legal var move = game.move({ from: source, to: target, promotion: 'q' // NOTE: always promote to a queen for example simplicity }); // console.log('=== dron'); // illegal move if (move === null) { console.log('invalid'); return 'snapback'; } else { console.log('valid'); socket.emit("move", move) } }; var onMouseoverSquare = function (square, piece) { // get list of possible moves for this square var moves = game.moves({ square: square, verbose: true }); // exit if there are no moves available for this square if (moves.length === 0) return; // highlight the square they moused over greySquare(square); // highlight the possible squares for this piece for (var i = 0; i < moves.length; i++) { greySquare(moves[i].to); } }; var onMouseoutSquare = function (square, piece) { removeGreySquares(); }; var onSnapEnd = function () { board.position(game.fen()); }; var cfg = { draggable: true, position: 'start', onDragStart: onDragStart, onDrop: onDrop, onMouseoutSquare: onMouseoutSquare, onMouseoverSquare: onMouseoverSquare, onSnapEnd: onSnapEnd }; board = ChessBoard('board', cfg); // var socket = io(); msgButton.click(function (e) { console.log('++clicked'); socket.emit("message", "hello boi"); }); var handleMove = function (source, target) { var move = game.move({ from: source, to: target }); console.log('==='); if (move === null) return "snapback"; else socket.emit("move", move); }; socket.on("move", function (msg) { console.log('++move received: ', msg); game.move(msg); board.position(game.fen()); });
Votre serveur Io est en cours d'exécution sur le port
8080 code> (comme dans votre code)