websockets tutorial socket node example español con node.js express socket.io pug

node.js - tutorial - socket.io: no puede hacer que funcione, teniendo 404''s en algún tipo de llamada de sondeo



socket.io tutorial español (3)

Estoy intentando configurar un servidor con socket.io, con malos resultados.

Principalmente estoy siguiendo esta guía, aunque está algo desactualizada: http://www.williammora.com/2013/03/nodejs-tutorial-building-chatroom-with.html

El problema viene con socket.io, no estoy seguro si es cliente o servidor. Parece estar intentando continuamente sondear el servidor, pero está recuperando 404. Eso suena como socket.io no se está ejecutando, pero todo se ve bien para mí. También puede tener algo que ver con los caminos y tener un directorio "público", pero realmente no lo sé.

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"

Servidor

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." ); });

Cliente

script( src="js/socket.io.js" ) var socket = io.connect( "http://localhost:8080" );

Obtuve el archivo js del cliente de: node_modules / socket.io / node_modules / socket.io-client / socket.io.js

Esa ruta no concuerda con lo que dice el tutorial que uso, o con lo que dice socket.io, entonces tal vez ese es el problema, pero parece que probablemente sea el archivo correcto.

¿Alguna ayuda aquí?

EDITAR Para obtener información adicional, aquí está la jerarquía de mi carpeta:

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

El servidor.js en la carpeta my_modules es donde inicio socket.io en el lado del servidor. El servidor.js en la carpeta js es el código del cliente para conectarse desde el sitio web.


En mi caso, creé mi aplicación con el generador de aplicaciones Express . Para resolver este problema, en lugar de editar el archivo app.js en la carpeta raíz del proyecto, edité el archivo bin / www en la línea después de que se definió el servidor:

/** * Create HTTP server. */ var server = http.createServer(app); var io = require(''socket.io'')(server); // Add this here

Actualizar

Encontré una mejor manera aquí Express Generator y Socket.io


Parece que Socket.IO no puede interceptar solicitudes que comienzan con /socket.io/ . Esto se debe a que en su caso el oyente es una app : un controlador Express. Tienes que hacer que http sea ​​el oyente, para que Socket.IO tenga acceso al manejo de las solicitudes.

Intenta reemplazar

app.set( "ipaddr", "127.0.0.1" ); app.set( "port", 8080 );

con

http.listen(8080, "127.0.0.1");

Ver documentos para más detalles: http://socket.io/docs/#using-with-express-3/4


Solo para comprobar que es su servidor o simplemente un problema del cliente, puede usar este sitio web: websocket-echo , si este cliente se conecta directamente a su servidor (el primer cliente de formulario es útil si su servidor está en línea, si está en su host, websocket.org ...

Usando un editor de texto, copie el siguiente código y guárdelo como websocket.html en algún lugar de su disco duro

Código: websocket-test

La única cosa diferente a la mía que pude observar es la fuente del cliente io: <script src="/socket.io/socket.io.js"></script> en el lado del cliente.

En tu servidor deberías probarlo de esta manera:

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);

Tenga en cuenta que de esta manera funciona bien con estas dependencias: le recomiendo que agregue este código a continuación a su archivo package.json:

"dependencies": { "express": "3.x.x", "socket.io": "*", "util": "*" }

¡aclamaciones!