Para instalar el node.js en estos momentos está en los repositorios de SID de debian:
su aptitude install nodejs npm exit npm install socket.io nano server.js
var server = require("socket.io").listen(6969);
server.sockets.on("connection", function(message)
{
message.on("newMessage", function(data)
{
server.sockets.emit("sendEvent", data);
});
});
nano index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Online chat</title>
<style>
body
{
color: #333;
background: #333;
font-family: "Helvetica", Arial;
font-size: 14px;
text-align: center;
}
.container
{
background: #ccc;
border-radius: 1em;
box-shadow: 0px 5px 5px rgba(0,0,0,0.5);
text-shadow: 5px 5px 5px rgba(0,0,0,0.5);
margin: 1em auto;
padding: 1em;
width: 90%;
}
input
{
display: block;
font-size: 12px;
margin: 1em auto;
padding: 0.5em;
width: 95%;
}
span
{
display: block;
font-size: 12px;
margin: 1em auto;
padding: 0.5em;
width: 95%;
text-align: left;
}
</style>
<script src="http://clab.nodester.com/socket.io/socket.io.js"></script>
<script type="text/javascript">
<!--
// aquí ponemos la IP PÚBLICA
var websocket = io.connect("http://192.168.100.103:6969");
window.onload = function()
{
websocket.on("sendEvent", function(data)
{
var chat = document.getElementById('zchat');
var span = document.createElement('span');
var txt = document.createTextNode(data);
span.appendChild(txt);
if(chat.hasChildNodes())
chat.insertBefore(span, chat.firstChild);
else
chat.appendChild(span);
});
var form = document.getElementById('zform');
var message = document.getElementById('zmessage');
form.onsubmit = function(e)
{
websocket.emit("newMessage", message.value);
message.value = '';
return false;
};
message.value = '';
message.focus();
};
//-->
</script>
</head>
<body>
<div class="container">
<form id="zform">
<label>Message: </label>
<input type="text" name="zmessage" id="zmessage" placeholder="Please insert message" required />
<input type="submit" />
</form>
</div>
<div id="zchat" class="container">
</div>
</body>
</html>
Arrancamos el servidor:
node server.js
Ahora abrimos el fichero index.html con el navegador para empezar a escribir mensajes.
Gracias a: Curso de Node.js, Websockets y HTML5 de #mejorandola


de donde puedo descargar este archivo porq ya no existe en ese servidor…
Lo puedes encontrar en tu sistema así:
find / | grep socket.io.js
yo por ejemplo lo tengo en:
/home/zital/.node_libraries/.npm/socket.io-client/0.8.7/package/dist/socket.io.js
/home/zital/.node_libraries/.npm/.cache/socket.io-client/0.8.7/package/dist/socket.io.js
/home/zital/.node_libraries/.npm/.cache/socket.io/0.8.7/package/lib/socket.io.js
/home/zital/.node_libraries/.npm/socket.io/0.8.7/package/lib/socket.io.js
copia cualquier fichero ya que todos son lo mismo a la misma carpeta que el index.html y pon así en el html:
<script src="socket.io.js"></script>
Muy bien por el ejemplo, es aun mas simple que el de mejorando.la, aunque creo que deberias explicar ms a detalle omo funciona para los que no saben de node.
node.js es el motor de javascript v8 de chrome hecho para que funcione como lenguaje de servidor.
socket.io es un paquete de node.js para trabajar en tiempo real con los datos del cliente.
tenéis más información en sus respectivas webs y en wikipedia ;)
Si vemos el ejemplo, en el servidor.js tenemos 2 eventos:
“newMessage” que lo que hara es recibir un dato y luego ese dato lo enviamos con el evento “sendEvent” que son los mismos eventos que ponemos en el lado del cliente, tan simple como eso.
no funciona…
¿Qué es lo que no te funciona?
Hola, a mi tampoco me funciona.. fijate que hice todo el codigo, lo unico que cambie fue lo siguiente:
http://clab.nodester.com/socket.io/socket.io.js
por
/socket.io/socket.io.js
ya que asi está en la documentacion oficial (https://github.com/learnboost/socket.io/)… pero aun asi, cuando ejecuto, el servidor solo me muestra el mensaje: “Welcome to socket.io”
¿has cambiado la IP en el js? mira con el firebug en el apartado RED/NET si te da algún error por lo que se ve no se te conecta al servidor node.js y un poco de mano izquierda que todo no funciona con copia pega.
Claro, el tema aqui es que averiguando bien, hay que agregar la siguiente linea de codigo para que el servidor node.js funcione:
var http = require(“http”);
y luego hacer las configuraciones respectivas para que el servidor permita la interacción..
una pregunta se puede realizar un socket en html o forsosamente se rekiere java
Aquí no usamos java sino javascript, son cosas diferentes y no se puede crear un socket con html, incluso con html5 se requiere javascript:
http://dev.w3.org/html5/websockets/
me tira un error al enviar el dato al servidor… por ejemplo si pongo en la url localhost:6969 me dice que esta corriendo el socket.io con el mensaje Welcome to socket.io. modifique todo para que la pagina corriera con mi localhost pero el unico cambio que veo es que en la url me sale el mensaje de la forma http://localhost/chat/?zmessage=asdasd y con el explorador de google me dice Uncaught ReferenceError: io is not defined justo donde supuestamente se comunica o envia el dato al servidor.. si tubiera una pronta respuesta seria genial, me interesa mucho aprender node.js
el problema está en que no encuentra el socket.io.js (creo) ya que el que tenemos puesto no funciona, mirate este comentario:
http://hispabyte.net/2011/12/crear-un-chat-con-node-js-y-socket-io/#comment-221
de todas formas usa la “consola” de firebug para debuggear y el “NET” para saber si algún fichero te da 404 not found, suerte.
lo de poner el archivo en la carpeta lo hice y busque el error con el debugger del chrome y bueno hasta ahí quedo :S
me refería a firebug de firefox
XML can’t be the whole program
?zmessage=asdasd()?zmessage=asdasd (línea 51)
[Detener en este error]
…old;padding:0 0 5px;margin:0;”>Application not found</html
?zmessage=asdasd (línea 51, columna 502)
io is not defined
?zmessage=asdasd()?zmessage=asdasd (línea 51)
[Detener en este error]
var websocket = io.connect("http://localhost:6969");
esos son los errores que me tira el firebug de firefox
Gracias por sus respuestas!
ponme el código entero del server y del cliente en: http://pastebin.com/ y pon aquí el link.
http://pastebin.com/a0KAhGzd index
http://pastebin.com/krNNa2tT server
listo acabo de pegar los códigos de ante mano muchas gracias..
=)
No se porque no veo tu comentario en la web:
// aquí ponemos la IP PÚBLICA
var websocket = io.connect(“http://localhost:6969″);
aqui no pongas localhost sino tu IP
y al parecer la ruta del socket.io.js esta mal, mira en FIREBUG -> NET -> ALL si tienes algun archivo en rojo, puede ser que hayas puesto mal la ruta del javascript
me sale en rojo cuando va hacer el envío del mensaje :c nunca lo pude hacer andar D:
Saludos!
¿tienes bien la ruta del socket.io.js?
Culpa mia que no se viera el comentario, faltaba aprobarlo.
ahora estoy probando en windows 7…. están seguro que no cambió nada con las nuevas actualizaciones? D:
http://www.youtube.com/results?search_query=socket.io+windows&oq=socket.io+windows&aq=f&aqi=&aql=&gs_sm=3&gs_upl=126l3908l0l4075l17l17l0l0l0l0l144l1239l16.1l17l0
Estimado tengo instalado el node.js incluso e echo correr ejercicios básicos, ya descarté que sea problema de instalación, quizás con las versiones nuevas exista algún cambio en el código, seguiré intentando y siguiendo una guía que encontré por internet más actualizada. cualquier cosa que encuentre les tendré al tanto, gracias por su paciencia.
saludos!
Buenas a todos! encontré mi problema al momento de importar la biblioteca de socket.io se debe hacer de la manera:
yo antiguamente lo hacia sin ponerle el puerto, por eso no me resultaba
Saludos! y gracias por la guía =)
lol no salió XD emm creo que ahora deberia mostrarse esa:
http://clab.nodester.com/socket.io/socket.io.js
la cambiamos por esta
http://192.168.1.3:6969/socket.io/socket.io.js
con la dirección ip, del pc claro…
saludos!
espectacular el tutorial
Pingback: node.js socket.io: crear session por socket autenticado | Hispabyte
Hay forma de dejar el arranque automatico del node server.js
Hola, estoy buscando un programador que me pueda desarrollar un chat multicanal con node.js. Me podeis ayudar? Gracias
si me dejas tu correo electronico lo pondre en twitter o si tienes twitter dime tu nick, deja el correo electronico como:
usuario[arroba]dominio[punto]com para prevenir spam
Buenas, probe el código pero me aparece solo “Welcome to socket.io.” como algunos otros, ya importe el socket.io.js en la misma ruta que index.html ya que el del servidor ya no existia pero no funciona, alguna solución?
Saludos
en el index.html
cambia: var websocket = io.connect(“http://192.168.100.103:6969″);
por:
var websocket = io.connect(window.location.protocol+”//”+window.location.hostname+”:6969″);
de todas formas instala firebug, mira el apartado CONSOLE y NET para ver si existe algún error
He cambiado la linea pero nada, sigue igual y en Firebug o el inspeccionador de Webkit no hay ningun fallo. Deberías mejor colocar un videotuto anque sea corto para verificar el funcionamiento o una serie de de imágenes.
Saludos
¿videotutorial para 2 ficheros? prueba a hacerlo tu para que podamos ver tu fallo, no me creo que no te este dando algun error, ¿la consola de node que dice? ¿que sistema operativo usas?
Me refería a funcionamiento no a muestreo de código. Uso Linux Mint x64, la consola no da fallo únicamente cuando se inicia el server dice:
info – socket.io started
Y eso es todo.
vamos que el servidor funciona pero desde el cliente no se conecta ya que de lo contrario se activaría el LOG del servidor. Fijate si en el servidor has puesto el mismo puerto. Después del:
var websocket…
pon un:
if(console)
console.log(websocket);
si el resultado NO es parecido a este:
“SocketNamespace { socket=Socket, flags={…}, json=Flag, more…}”
es que hay algún error en la parte del cliente
Lo intentaré.. creo que ya encontre el error! Gracias
Muy bien articuló y la duda obvia que surge, como pruebo que funciona si tengo un movil con.navegador y una lap, despues de haber iniciado el server.js, que direccion coloco en el navegador de cada uno?
De antemano gracias!
tienes que alojar el index.html en un servidor web y poner la IP en el navegador, dentro de poco escribiré una nueva entrada sobre node.js + socket.io a ver si la escribo para esta semana, un saludo
Hola, tengo un par de problemas. Resulta que ejecuto el index.html en firefox y cuando pasa eso o cuando trato de enviar un mensaje me aparece esto en el firebug
ReferenceError: require is not defined
var client = require(‘socket.io-client’);
socket.io.js (line 12)
ReferenceError: io is not defined
var websocket = io.connect(window.location.protocol+”//”+localhost+”:6969″);
?zmessage=soldier (line 51)
Estoy en Linux, y asà tengo organizados los archivos:
/var/www/chatnodejs/index.html
/var/www/chatnodejs/socket.io.js
/home/miusuario/server.js
y cuando ejecuto el server js desde la terminal simplemente abro la termina y coloco:
node server.js
A que crees que se deba?
puede ser que tengas mal el js del socket.io en la parte del cliente, copia este fichero:
./node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js a tu parte pública, puede que hayas copiado el socket.io de la parte del servidor
Lo he solucionado, con el comentario anterior ya que habia copiado el socket server y no el cliente y funciono con la línea que esta en el post no con la segunda que me mencionaste:
var websocket = io.connect(window.location.protocol+”//”+window.location.hostname+”:6969″);
Si por ejemplo, quiero añadir este pequeño servicio a sitio que ya esta hecho, en que ruta debería copiar el socket.io.js el server.js y el chat.html, es decir, pueden estar los 3 en una misma carpeta?
Saludos
No es recomendable tener acceso a ficheros de la parte del servidor en una carpeta publica pero el index.html y el socket.io.js los puedes tener
Es posible que algún usuario abra el cliente de socket io desde otra web y así ver lo que pasa en privado?
Si el programa está bien hecho no, de lo contrario puede, lo suyo es enviar los eventos sólo a los clientes necesarios. En este caso cualquiera podría coger los eventos.