2010-12-08 7 views
3

J'ai installé NodeJS sur ma machine Ubuntu et ont créé le script suivant ....NodeJS et HTML5 Websockets ne travaillent pas ensemble

var host = 'localhost' 
var port = '8080' 
var net = require('net'); 

net.createServer(function (socket) { 
    socket.write("Echo server\r\n"); 
    socket.on("data", function (data) { 
     socket.write(data); 
    }); 
}).listen(port, host); 

console.log('Server running at http://' + host + ':' + port + '/'); 

Je lance alors ...

node example.js 

.. .in un terminal, ce qui me donne ce qui suit ...

Server running at http://localhost:8080/ 

J'ai créé une simple page HTML avec le code suivant ...

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html> 
    <head> 
     <script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js'></script> 
     <script> 
     $(document).ready(function(){ 
      if(!("WebSocket" in window)) { 
       alert("Sorry, the build of your browser does not support WebSockets."); 
       return; 
      } 

      ws = new WebSocket("ws://localhost:8080/"); 

      ws.onclose = function() { 
       alert("socket closed"); 
      }; 
      ws.onopen = function() { 
       alert("socked opened"); 
      }; 
      ws.onmessage = function() { 
       alert("message received"); 
      }; 

      $('button').click(function() { 
       ws.send("testing"); 
      }); 

      setInterval(function() { 
       $('p.readyState').text(ws.readyState); 
      }, 1000); 
     }); 
     </script> 
    </head> 
    <body> 
     <button type="button">Click Me!</button> 
     <p class="readyState"></p> 
    </body> 
</html> 

Mais quand je passe en revue à la page je reçois pas de commentaires et le readyState est toujours 0. Si j'arrête le serveur alors que la page est toujours ouverte, je reçois la prise d'alerte fermée.

J'ai testé ce script dans Chrome (8.0.552.215), Firefox 4 (Beta 7) et Opera 11 (Bêta).

Quelqu'un a-t-il des suggestions?

Merci!

Répondre

7

Vous n'exécutez pas un serveur WebSocket, vous utilisez un serveur HTTP. J'ai écrit un tutorial on WebSockets and Node.js, essayez de lire à travers cela pour une explication plus détaillée.

Vous devez élever la connexion à une connexion WebSocket car une connexion WS utilise initialement une requête HTTP standard. Créez un serveur autour de l'implémentation Node's WebSocket Server au lieu de net.

3

Je suggère que vous jetez un oeil à socket.io qui fournit une API cross-browser commune, en utilisant de manière transparente tout ce que le navigateur supporte (y compris les websockets). L'implémentation côté serveur officiel est dans NodeJS. Il a été suggéré dans this question.

Firefox has disabled Websockets dans la pré-version à venir en raison d'un security vulnerability grave au niveau du protocole. Opera a annoncé faire la même chose dans la version 11.

Questions connexes