Je suis relativement nouveau sur node.js et ses addons, donc c'est probablement une question de débutant.
J'essaie d'obtenir une simple page HTML sur un serveur Web. Connectez-vous à un autre serveur exécutant node.js avec websocket.io.
Mon code ressemble à ceci:
Client
<script src="socket.io/socket.io.js"></script>
<script>
// Create SocketIO instance, connect
var socket = new io.Socket();
socket.connect('http://127.0.0.1:8080');
// Add a connect listener
socket.on('connect',function() {
console.log('Client has connected to the server!');
});
// Add a connect listener
socket.on('message',function(data) {
console.log('Received a message from the server!',data);
});
// Add a disconnect listener
socket.on('disconnect',function() {
console.log('The client has disconnected!');
});
// Sends a message to the server via sockets
function sendMessageToServer(message) {
socket.send(message);
};
</script>
côté serveur
// Require HTTP module (to start server) and Socket.IO
var http = require('http');
var io = require('socket.io');
var port = 8080;
// Start the server at port 8080
var server = http.createServer(function(req, res){
// Send HTML headers and message
res.writeHead(200,{ 'Content-Type': 'text/html' });
res.end('<h1>Hello Socket Lover!</h1>');
});
server.listen(port);
// Create a Socket.IO instance, passing it our server
var socket = io.listen(server);
// Add a connect listener
socket.on('connection', function(client){
console.log('Connection to client established');
// Success! Now listen to messages to be received
client.on('message',function(event){
console.log('Received message from client!',event);
});
client.on('disconnect',function(){
clearInterval(interval);
console.log('Server has disconnected');
});
});
console.log('Server running at http://127.0.0.1:' + port + '/');
Le démarrage du serveur fonctionne correctement et fonctionne http: // localhost: 808 dans mon navigateur fonctionne également, renvoyant 'Hello Socket Lover' comme prévu. Mais je veux faire parler une page différente aux sockets, pas en lancer une à partir de node.js.
Mais lorsque je l'exécute, rien ne se produit et la console Chrome retourne:
Failed to load resource http://undefined/socket.io/1/?t=1333119551736
Failed to load resource http://undefined/socket.io/1/?t=1333119551735
J'y ai passé toute la journée. De l'aide?
Avez-vous essayé de charger le script socket.io à partir d'une URL relative?
Vous utilisez:
<script src="socket.io/socket.io.js"></script>
Et:
socket.connect('http://127.0.0.1:8080');
Tu devrais essayer:
<script src="http://localhost:8080/socket.io/socket.io.js"></script>
Et:
socket.connect('http://localhost:8080');
Commutateur localhost:8080
avec tout ce qui convient à votre configuration actuelle.
De plus, en fonction de votre configuration, vous pouvez rencontrer des problèmes de communication avec le serveur lors du chargement de la page client à partir d'un domaine différent (stratégie de même origine). Cela peut être surmonté de différentes manières (en dehors du champ de cette réponse, google/SO it).
Vous devez vous assurer que vous ajoutez une barre oblique avant votre lien vers socket.io:
<script src="/socket.io/socket.io.js"></script>
Ensuite, dans la vue/le contrôleur, faites simplement:
var socket = io.connect()
Cela devrait résoudre votre problème.