Foros del Web » Programando para Internet » Node.js »

[SOLUCIONADO] socket remoto

Estas en el tema de socket remoto en el foro de Node.js en Foros del Web. Soy relativamente nuevo en node y lo que es socket. Hice un ejemplo pequeño de socket para ver cuando una persona se conecta. app.js @import ...
  #1 (permalink)  
Antiguo 30/07/2014, 15:16
Avatar de bocho0610  
Fecha de Ingreso: enero-2010
Ubicación: <? echo "Santiago, Chile"; ?>
Mensajes: 341
Antigüedad: 14 años, 4 meses
Puntos: 26
socket remoto

Soy relativamente nuevo en node y lo que es socket. Hice un ejemplo pequeño de socket para ver cuando una persona se conecta.

app.js
Código Javascript:
Ver original
  1. var io = require('socket.io').listen(8080);
  2.  
  3. io.sockets.on('connection', function (socket) {
  4.     console.log('hola');
  5. });

cliente.js
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <head>
  3.         <title></title>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  6.         <script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>
  7.         <script>
  8.             var socket = io.connect('http://localhost:8080');
  9.         </script>
  10.     </head>
  11.     <body>
  12.        
  13.     </body>
  14. </html>

El problema desde la web es que me tira el mensaje:
Código CODE:
Ver original
  1. XMLHttpRequest cannot load http://localhost:8080/socket.io/?EIO=2&transport=polling&t=1406754889464-4. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Ya que tengo el servidor separado del html cliente. Vi unos ejemplos donde daban solución a este problema, pero no pude arreglarlo.

Gracias!
__________________
Sigueme en Twitter!
Septimoarte.cl <-- Un mundo en cine.
  #2 (permalink)  
Antiguo 30/07/2014, 18:59
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: socket remoto

Hola varias cosas!

la primera :

Código HTML:
Ver original
  1. <script src="https://cdn.socket.io/socket.io-1.0.6.js"></script>

Esto no debería ir a así !
Ahora estas intentando hacer cross-domain por eso te falla ..

Te explico :
nodejs cuando arrancas tu app el ya genera la ruta al socket.io
Este debe ser tu código mas o menos de servidor nodejs :

Código Javascript:
Ver original
  1. //creamos el server
  2. var app = require('http').createServer(handler)
  3. var io = require('socket.io')(app);
  4. var fs = require('fs');
  5. //importamos librerías y asociamos server el método listen para que escuche en el puerto 8080
  6. app.listen(8080);
  7.  
  8. //esta función maneja y enruta la petición de req (request) y la respuesta res (response)
  9. function handler (req, res) {
  10.   fs.readFile(__dirname + '/index.html', //aqui la dirección podria ser node.php
  11.   function (err, data) {
  12.     if (err) {
  13.       res.writeHead(500);
  14.       return res.end('Error loading index.html');
  15.     }
  16.  
  17.     res.writeHead(200);
  18.     res.end(data);
  19.   });
  20. }
  21.  
  22. io.on('connection', function (socket) {
  23.  
  24. console.log(socket.id);
  25. //cuando se establece la comunicación
  26. //aqui hacemos todo el trabajo con los clientes/sockets conectados
  27. //socket.io dispone de 2 eventos emit y on
  28. //cuando es emit enviamos desde el servidor y cuando es on hacemos algo cuando recibamos
  29.   socket.on('peticion', function () {
  30. //Se dispara este console log porque desde el navegador le enviamos el evento
  31.   console.log("Recibo una petición!");
  32. // y nosotros respondemos
  33.      socket.emit('respuesta', { llave: 'valor' });
  34.   });
  35. });



En resumen , primero al arrancar node creamos la ruta al script para el cliente y el manejador de rutas.

Luego del lado del cliente :

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.     <head>
  3.         <title></title>
  4.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  5.         <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  6.        <script src="http://localhost:8080/socket.io/socket.io.js"></script>
  7.         <script>
  8.             var socket = io.connect('http://localhost:8080');
  9.             function enviarPeticion(){
  10.              socket.emit("peticion");
  11.             }
  12.             socket.on("respuesta",function(datos){
  13.                alert(datos.llave);
  14.               });
  15.         </script>
  16.     </head>
  17.     <body>
  18.         <button onclick="enviarPeticion()"></button>
  19.     </body>
  20. </html>
Cuando pulsemos el botón haremo un emit y nodejs recibira una petición que desencadenara el evento respuesta y le enviará al navegador un json .

Un saludo a tod@s!

Última edición por Djoaq; 30/07/2014 a las 19:07

Etiquetas: remoto, socket
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 12:19.