Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Problema con Socket.io

Estas en el tema de Problema con Socket.io en el foro de Frameworks JS en Foros del Web. Buenas madrugadas... Ando peleando con este problema, he buscado como loco y la verdad no he podido solucionar mi problema... he seguido el tutorial de ...
  #1 (permalink)  
Antiguo 26/07/2012, 02:11
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 1 mes
Puntos: 5
Problema con Socket.io

Buenas madrugadas...
Ando peleando con este problema, he buscado como loco y la verdad no he podido solucionar mi problema... he seguido el tutorial de un chat en node, al ejecutar el server, me aparece el mensaje que socket.io está corriendo bien.. pero al ver la página en la consola del firebug me aparece que el método "io" no ha sido definido... les copio mi codigo a ver si me pueden echar una mano con este tema engorroso para mi:

app.js

Código PHP:
var app = require('express').createServer(),
    
io = require('socket.io').listen(app);

app.listen(3000);

// routing

app.get('/', function(reqres){
    
res.sendfile(__dirname '/index.html');
});

// (Creacion del objeto). Relacion de nombres de usuarios que estan actualmente conectado al chat
var usernames = {};

// todo este codigo tiene que ver con el funcionamiento del chat.
io.sockets.on('connection',function(socket){
    
// cuando el cliente emite 'sendchat', este escucha y ejecuta.
    
socket.on('sendchat',function(data){
        
// le diremos al cliente que ejecute 'updatechat' con 2 parametros
        
io.sockets.emit('updatechat'socket.usernamedata);
    });

    
// cuando el cliente emite un evento 'adduser', el servidor escucha y ejecuta
    
socket.on('adduser', function(username){
        
// almacenamos el username en el socket de sesion para este cliente
        
socket.username username;
        
// agregamos el nombre de usuario del cliente a la lista global
        
usernames[username] = username;
        
// informamos al cliente que se ha conectado
        
socket.emit('updatechat''SERVER '' te has conectado');
        
// informamos globalmente (todos los clientes) que alguien se ha conectado
        
socket.broadcast.emit('updatechat''SERVER 'username ' se ha conectado' );
        
// actualizo la lista de usuarios en el chat, lado del cliente.
        
io.sockets.emit('updateusers',username);
    });
    
// cuando el usuario se desconecte... llevar a cabo esto:
    
socket.on('disconnect', function(){
        
// remover el nombre de usuario de la lista global de nombres de usuarios
        
delete usernames[socket.username];
        
// actualizamos la lista de usuarios en el chat: lado del cliente
        
io.sockets.emit('updateusers'usernames);
        
// informamos globalmente que un determinado cliente se ha desconectado
        
socket.broadcast.emit('updatechat''SERVER 'socket.username ' se ha desconectado ');
    });
}) 
index.html
Código HTML:
<!DOCTYPE HTML>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <title>Bienvenidos</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <script type="text/javascript">
      var socket = io.connect('http://localhost:3000/');
      
      // cuando se conecte con el servidor, pregunta por un nombre de usuario con un callback anonimo
      socket.on('connect', function () {
        // llama al lado del servidor, funcion 'adduser' y envia un parametro (valor del prompt)
        socket.emit('adduser', prompt("cual es tu nombre?"));
      });


      // escuchando: en cualquier momento que el servidor emite un 'updatechat', esto actualiza el cuerpo del chat

      socket.on('updatechat', function(username, data){
          $('#conversacion').append('<b>'+username+'</b>'+" "+ data + '<br />');
      });

      // escuchando: en cualquier momento que el servidor envie un 'updateusers', esto actualiza la lista de usuarios

      socket.on('updateusers', function(data){
          $('#usuarios').empty();
          $('#usuarios').append('<div>'+ data +'</div>');
      });

      // Cuando cargue la pagina:

      $(function(){
          // cuando el cliente haga clic en Enviar
          $('#datasend').click(function(){
              var message = $('#data').val();
              $('#data').val('');
              // le decimos al servidor que ejecute 'sendchat' y enviar solo un parametro
              socket.emit('sendchat', message);
          });

          // cuando el cliente presione ENTER con su teclado.

          $('#data').keypress(function(e){
              if(e.which==13){
                  $(this).blur();
                  //con la siguiente linea llamo a la funcioan #datasend
                  $('#datasend').focus().click();
              }
          });
      });
    </script>
</head>
<body>
    <div style="float: left; width: 100px; border-right: 1px solid black; height: 300px;padding: 10px; overflow: scroll-y;">
        <b>Usuarios</b>
        <div id="usuarios"></div>
    </div>
    <div style="float: left; width: 300px; height: 250px;padding: 10px; overflow: scroll-y;">
        <div id="conversacion"></div>
        <input id="data" style="width: 200px" />
        <input type="button" id="datasend" value="Enviar" />
    </div>
</body>
</html> 
cuando ingreso a la carpeta de la aplicacion y luego escribo "node app.js" me aparece el mensaje: "info - socket.io started" pero al visualizar la página veo el siguiente error en la consola:
Código HTML:
"NetworkError: 404 Not Found - http://localhost:3000/socket.io/socket.io.js"socket.io.jsReferenceError: io is not defined[IMG]chrome://firebug/content/blank.gif[/IMG]var socket = io.connect('http://localhost:3000/');
Si alguien tiene alguna idea le quedaré muy agradecido... saludos!
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #2 (permalink)  
Antiguo 30/07/2012, 14:17
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 2 meses
Puntos: 8
Respuesta: Problema con Socket.io

Hola, talvez si pruebas a poner la dirección completa donde enlaces el script:

Código Javascript:
Ver original
  1. <script src="http://localhost:3000/socket.io/socket.io.js"></script>
  #3 (permalink)  
Antiguo 30/07/2012, 15:50
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 21 años, 1 mes
Puntos: 5
Respuesta: Problema con Socket.io

Gracias por tu respuesta.
Pude solucionar el problema y no tenía nada que ver con socket.io, sino, mas bien con Express y que mi version estaba actualizada y la forma de llamar a socket.io era incorrecta para mi nueva versión, que lío. Créeme que probé todas las formas habidas y por haber hasta que encontré la solución, te la paso:

Código PHP:
var io = require('socket.io');
var 
express = require('express');
 
var 
app express.createServer();
var 
server app.listen(8080);
var 
ioServer io.listen(server);

app.get('/', function (reqres) {
  
res.sendfile(__dirname '/index.html');
}); 
Hay que colocar ese codigo a la hora de crear el servidor... un saludo.
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus

Etiquetas: ajax, funcion, html, input, js, socket-io
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:36.