Question

Je fais un petit jeu multijoueur utilisant Node.js et Socket.IO sur mon ordinateur portable. De temps en temps, quand je veux tester certaines fonctionnalités multijoueur je me connecte dans le jeu en utilisant mon PC (le PC et l'ordinateur portable sont connectés à un réseau LAN). Socket.io se connecte à IP de mon routeur (... 196.) et le port 8080. Tout a bien fonctionné jusqu'à aujourd'hui, et quand je voulais juste voir comment cela fonctionnait avant changé quoi que ce soit - tout d'un coup, il ne l'a pas. J'ai ouvert Google Chrome sur mon ordinateur portable et se connecter, qui marchait bien. Ensuite, j'ai ouvert Google Chrome sur mon PC et a essayé de se connecter, et cela n'a pas fonctionné. Tout d'abord, l'utilisateur entre son nom et le mot de passe à un formulaire et clique sur un bouton de connexion, qui appelle cette fonction:

          login = function()
          {
               var n = document.forms['logn']['name'].value;
               var p = document.forms['logn']['password'].value;              

            var socket = io.connect("http://192.168.0.13:8080");
            socket.emit("login", {n: n, p: p});

            socket.on("got", function(data){
                 if (data.good)
                 {
                      main(socket, n)
                 }
                 else
                 {
                      alert("Failed to log in.");
                 }
            });
          }

Quand je le get fonction est appelée, rien ne se passe. J'ai remarqué que le serveur enregistre des messages similaires à ceci:

réglage demande GET /socket.io/1/websocket /

Mais XHR-sondage est le plus souvent websocket. C'est tout ce que je sais pour l'instant, tout fonctionne aussi bien sur Firefox, donc je pense qu'il est un problème avec Google Chrome.

journaux de serveur lorsque je tente de se connecter à partir du PC:

debug - debug statique servi - client autorisé
info - poignée de main autorisée 30836340583773206
debug - Demande de réglage GET /socket.io/1/websocket/30836340583773206
debug - jeu intervalle de pulsation pour le client 30836340583773206
debug - client autorisé pour
debug - Demande de réglage GET /socket.io/1/xhr-polling/30836340583773206?t=1315509666877
debug - réglage de temps mort sondage
debug - rejeter le transport
debug - effacé intervalle de pulsation pour le client 30836340583773206
debug - /socket.io.js servi statique

Était-ce utile?

La solution

Je viens d'avoir exactement la même question.

Je pourrais poignée de main, et l'authentification par Chrome, mais tout n'étaient pas émette manipulé correctement sur le client (bien que Socket.io les envoyait).

Connectez-vous à votre serveur et mise à jour socket.io.

$> npm ls vous dira la dernière version de vos modules installés. Dans mon cas, je courais:

/var/www/discovery/node
├─┬ express@2.4.6 
│ ├── connect@1.6.2 
│ ├── mime@1.2.2 
│ └── qs@0.3.1 
├── iniparser@1.0.3 
├── jsonrpc@0.1.1 
├── jsonrpc-ws@0.0.3 
├── jsonrpc2@0.0.6 
├─┬ mysql@0.9.3 
│ └─┬ hashish@0.0.4 
│   └── traverse@0.5.1 
└─┬ socket.io@0.7.9 
  ├── policyfile@0.0.4 
  ├── redis@0.6.6 
  └─┬ socket.io-client@0.7.9 
    ├── uglify-js@1.0.6 
    ├── websocket-client@1.0.0 
    └── xmlhttprequest@1.2.2 

Vous pouvez voir que socket.io@0.7.9 est vieux. Cela a également des moyens qu'il ne possède pas les dernières ws. // mise à jour du protocole WebSocket

Ainsi, afin de le corriger, il suffit d'exécuter:

$> npm update socket.io express
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top