J'essaie de démarrer avec socket.io et node.js.
En suivant le premier exemple sur le site de socket.io, j'obtiens l'erreur suivante dans la console du navigateur:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:3001/socket.io/socket.io.js
Uncaught ReferenceError: io is not defined
Ceci est mon server.js
var app = require('express').createServer()
, io = require('socket.io').listen(app);
app.listen(3001);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Et voici mon index.html
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="UTF-8" />
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
</body>
</html>
J'ai déjà installé socket.io ..
Tout d'abord, vous devez regarder le port du serveur sur lequel le serveur est lié (app.listen(3001);
) côté client afin d'atteindre le serveur.
Comme pour socket.io, l'ajout de http://localhost:3001
Avant le reste de la source dans la balise de lien résout ce problème. Cela est apparemment dû à la façon dont le réseau lie les ports à l'hôte local, mais j'essaierai de trouver plus d'informations sur la cause;
La liaison de port pour le serveur:
var socket = io.connect('http://localhost');
devrait être changé en
var socket = io.connect('http://localhost:3001');
Faire en sorte que socket.io se comporte:
<script src="/socket.io/socket.io.js"></script>
devrait être changé en
<script src="http://localhost:3001/socket.io/socket.io.js"></script>
Si vous utilisez express
version 3.x, il y a problèmes de compatibilité Socket.IO qui nécessitent un peu de réglage pour migrer :
La méthode
.listen()
de Socket.IO prend une instance dehttp.Server
Comme argument.
Depuis 3.x , la valeur de retour deexpress()
n'est pas une instance dehttp.Server
. Pour que Socket.IO fonctionne avec Express 3.x, assurez-vous de créer et de transmettre manuellement votre instancehttp.Server
À la méthode.listen()
de Socket.IO.
Voici un petit exemple:
var app = express()
, http = require('http')
, server = http.createServer(app)
, io = require('socket.io').listen(server);
server.listen(3000);
Premièrement, la documentation Socket.io " Comment utiliser " est vague (peut-être trompeuse); en particulier lors de la documentation du code pour le client Socket.io.
Deuxièmement, les réponses que vous avez données ici sur StackOverflow sont trop spécifiques. Vous ne devriez pas avoir à coder manuellement le protocole, le nom d'hôte et le numéro de port pour le client Socket.io; ce n'est pas une solution évolutive. Javascript peut gérer cela pour vous avec l'objet de localisation - window.location.Origin
.
Socket.io nécessite l'installation d'un serveur et d'un client.
Pour installer le serveurnpm install socket.io
Pour utiliser le client, ajoutez ce script à votre document (index.html)<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
Créez les fichiers suivants:
Serveur (app.js)
var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(80);
app.get('/', function (req, res) {
res.sendfile(__dirname + '/index.html');
});
io.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});
Client (index.html)
<script src="https://cdn.socket.io/socket.io-1.4.5.js"></script>
<script>
// Origin = http(s)://(hostname):(port)
// The Socket.io client needs an Origin
// with an http(s) protocol for the initial handshake.
// Web sockets don't run over the http(s) protocol,
// so you don't need to provide URL pathnames.
var Origin = window.location.Origin;
var socket = io.connect(Origin);
socket.on('news', function (data) {
console.log(data);
socket.emit('my other event', { my: 'data' });
});
</script>
Essaye ça
var app = express()
,http = require('http');
var server = http.createServer(app);
server.listen(3001);
io = require('socket.io').listen(server);
io.set('log level', 1);
J'espère que ça aide
Si vous essayez d'exécuter cela sur un autre ordinateur et que vous obtenez cette erreur, vous pouvez trouver cela utile.
var Host = window.location.hostname;
var socket = io.connect('http://' + Host);
Si vous utilisez https, vous devez évidemment également modifier le protocole. Dans mon cas, je devais créer un serveur qui fonctionnerait sur plusieurs ordinateurs locaux, donc mettre ici une adresse fixe ne fonctionnerait pas, car le socket devrait se connecter à une adresse différente selon le serveur à partir duquel vous chargez la page. Ajouter ceci ici car cela peut aussi aider quelqu'un d'autre.