J'essaie d'obtenir un serveur configuré avec socket.io, avec de mauvais résultats.
Je suis principalement en train de suivre ce guide, bien qu'il soit quelque peu obsolète: http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html
Le problème vient de socket.io, je ne sais pas si c'est côté client ou serveur. Il semble essayer d'interroger le serveur en continu, mais récupère le 404. Cela ressemble à socket.io ne fonctionne pas, mais tout me semble normal. Cela peut aussi avoir quelque chose à voir avec les chemins et avoir un répertoire "public", mais je ne sais pas vraiment.
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:36 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558296120-0 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:37 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558297181-1 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
127.0.0.1 - - [Thu, 17 Jul 2014 00:51:39 GMT] "GET /socket.io/?EIO=2&transport=polling&t=1405558299207-2 HTTP/1.1" 404 73 "http://localhost:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.76.4 (KHTML, like Gecko) Version/7.0.4 Safari/537.76.4"
Serveur
var exec = require( "child_process" ).exec;
var path = require( "path" );
var morgan = require( "morgan" );
var bodyParser = require( "body-parser" );
var _ = require( "underscore" );
var express = require( "express" );
var app = express();
var http = require( "http" ).createServer( app );
var io = require( "socket.io" )( http );
app.set( "ipaddr", "127.0.0.1" );
app.set( "port", 8080 );
//support JSON, urlencoded, and multipart requests
app.use( bodyParser() );
//log the requests using morgan
app.use( morgan() );
//specify the Jade views folder
app.set( "views", __dirname + "/../views" );
//set the view engine to Jade
app.set( "view engine", "jade" );
//specify static content
app.use( express[ "static" ]( "public", __dirname + "/../public" ) ); //using map-access of static so jslint won't bitch
io.on( "connection", function( socket )
{
console.log( "A user connected." );
});
Client
script( src="js/socket.io.js" )
var socket = io.connect( "http://localhost:8080" );
J'ai obtenu le fichier js client de: node_modules/socket.io/node_modules/socket.io-client/socket.io.js
Ce chemin ne correspond ni à ce que dit le didacticiel que j'utilise, ni à ce que socket.io dit d'utiliser, donc c'est peut-être le problème, mais il semble que ce soit probablement le bon fichier.
Une aide ici?
[~ # ~] modifier [~ # ~] Pour plus d'informations, voici la hiérarchie de mes dossiers:
Webserver/
my_modules/
server.js
node_modules/
body-parser/
express/
jade/
morgan/
socket.io/
underscore/
public/
css/
js/
server.js
views/
index.jade
index.js
package.json
Le server.js dans le dossier my_modules est l'endroit où je démarre socket.io côté serveur. Le server.js dans le dossier js est le code client pour se connecter à partir du site Web.
Il semble que Socket.IO ne puisse pas intercepter les demandes commençant par /socket.io/
. En effet, dans votre cas, l'écouteur est app
- un gestionnaire Express. Vous devez faire de http
un écouteur, afin que Socket.IO ait accès à la gestion des requêtes.
Essayez de remplacer
app.set( "ipaddr", "127.0.0.1" );
app.set( "port", 8080 );
avec
http.listen(8080, "127.0.0.1");
Voir les documents pour plus de détails: http://socket.io/docs/#using-with-express-3/4
Dans mon cas, j'ai créé mon application avec le Générateur d'applications express . Pour résoudre ce problème, au lieu de modifier le fichier app.js sur le dossier racine du projet, j'ai modifié le fichier bin/www sur la ligne une fois le serveur défini:
/**
* Create HTTP server.
*/
var server = http.createServer(app);
var io = require('socket.io')(server); // Add this here
Mise à jour
J'ai trouvé un meilleur moyen ici Express Generator et Socket.io
Juste pour vérifier qu'il s'agit de votre serveur ou simplement d'un problème client, vous pouvez utiliser ce site Web: websocket-echo , si ce client se connecte directement à votre serveur (le premier formulaire client est utile si votre serveur est en ligne, si est sur votre hôte, cuoting de websocket.org ...
À l'aide d'un éditeur de texte, copiez le code suivant et enregistrez-le en tant que websocket.html quelque part sur votre disque dur
Code: websocket-test
La seule chose différente de la mienne que j'ai pu observer est la source du client io: <script src="/socket.io/socket.io.js"></script>
côté client.
Sur votre serveur, vous devriez essayer de cette façon:
var express = require('express'),
app = express(),
http = require('http'),
server = http.createServer(app),
io = require('socket.io').listen(server),
exec = require('child_process').exec,
util = require('util');
//serve our code
app.use(express.static('public'));
app.use(express.json());
app.use(express.urlencoded());
//listening on connections
io.on('connection', function (socket) {
console.log('client connected!');
}
server.listen(8080);
Notez que cette méthode fonctionne correctement avec ces dépendances: je vous recommande d'ajouter ce code ci-dessous à votre fichier package.json:
"dependencies": {
"express": "3.x.x",
"socket.io": "*",
"util": "*"
}
à votre santé!