Node.js y socket.io no funcionan en el IDE de Cloud9

¿Alguien tiene experiencia en tener Node.js y socket.io trabajando en IDE de Cloud9?

El “Ejemplo (NodeJS con Socket.io)” (en https://c9.io/site/blog/2013/05/native-websockets-support/ ) no funciona.

Primero, el servidor ( https://c9.io/etlolap/webapp , /test.js) emite un error a menos que lo arregle de la siguiente manera. Hice clic en el botón Ejecutar mientras test.js está en la pestaña activa.

var socketIo = require('socket.io'), io = socketIo.listen(Number(process.env.PORT)); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

Entonces, mi cliente ( https://c9.io/etlolap/webapp , /test.html) aún no puede conectarse. Hice clic en el botón Vista previa mientras test.html está en la pestaña activa.

      var socket = io.connect('https://webapp-c9-etlolap.c9.io'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); });    Loading...   

y obtuve un mensaje de error a continuación.

Error al cargar el recurso: el servidor respondió con un estado de 404 — (No encontrado) https://c9.io/socket.io/socket.io.js

Error de referencia no detectado: io no está definido — test.html: 6

1. pasos

1.1) Run server.js

introduzca la descripción de la imagen aquí

La consola de la nube 9 aparece:

introduzca la descripción de la imagen aquí

1.2) Preview hit en index.html

introduzca la descripción de la imagen aquí

1.3) Luego se abre una ventana en el lado derecho de su IDE. Puede presionar el botón en el medio de la barra de navegación o copiar y pegar la URL en una nueva ventana del navegador.

introduzca la descripción de la imagen aquí

1.4) ¡La comunicación Socket está funcionando!

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

2. Requisito previo

2.1) módulo de nodo socket.io

Pulsa F6 o View -> Console e instala socket.io.

introduzca la descripción de la imagen aquí

2.2) el lado del cliente JavaScript de socket.io

Como no encontré un enlace oficial para descargarlo, creé un GitHubGist.

socket.io.js

3. Código

server.js

 // module dependencies var http = require("http"), sio = require("socket.io"); // create http server var server = http.createServer().listen(process.env.PORT, process.env.IP), // create socket server io = sio.listen(server); // set socket.io debugging io.set('log level', 1); io.sockets.on('connection', function (socket) { socket.emit('news', { message: 'Hello world!' }); socket.on('my other event', function (data) { console.log(data.message); }); }); 

index.html

      

Gracias por los comentarios de Damphat y Matthias. Después de muchos bashs fallidos, finalmente descubrí la solución yo mismo. En el IDE de Cloud9, la línea típica en el cliente (test.html aquí) se debe cambiar desde

   

a

   

El prefijo es la URL de la URL de su proyecto Cloud9. Al cambiar esta línea, mi ejemplo funcionó.

debes fluir estos pasos:

abra el terminal en https://c9.io/etlolap/webapp , escriba:

 npm install socket.io node test 

luego abre una nueva pestaña del navegador con url

 https://webapp-c9-etlolap.c9.io/socket.io/socket.io.js 

Verás el código fuente de socket.io.js


No hice cómo abrir test.html en c9.io sin el servidor http, ¿acaba de pulsar Vista previa?


Editar:

Para devolver archivos html, debe combinar el servidor http y el servidor socket.io de esta manera:

 // file: test.js var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , fs = require('fs') app.listen( Number( process.env.PORT ) ); function handler (req, res) { fs.readFile(__dirname + '/test.html', function (err, data) { if (err) { res.writeHead(500); return res.end('Error loading index.html'); } res.writeHead(200); res.end(data); }); } io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

Para recuperar cualquier archivo html solicitado, utilizando archivos html ubicados en la carpeta de archivos, puede usar Express:

 var fs = require('fs'); var express = require('express'); var app = express(); // This fetches html files from the client folder (if they exist), and returns a "Page could not be found" error otherwise (this can be customized to some other 404 error page as desired) app.get('*', function (req, res) { var urlReading = req.url; if (urlReading == "/") { urlReading = "/index.html"; } urlReading = __dirname + "/client" + urlReading; console.log("Loading: " + urlReading); fs.readFile(urlReading, function (err, html) { if (err) { console.log("Could not find " + urlReading) res.writeHead(200, { 'Content-Type': 'text/html' }); res.end("Page could not be found

Page could not be found

"); } else { console.log("Found " + urlReading) res.writeHead(200, { 'Content-Type': 'text/html' }); res.end(html); } }); }); app.listen(process.env.PORT, process.env.IP);