2012-10-17 15 views
9

Myślałem, że cały punkt socket.io nie musiał się martwić o nowoczesne przeglądarki? lolDlaczego moja aplikacja node.js/socket.io nie działa w systemie iOS6?

W każdym razie, jestem nowy w programowaniu gniazd. Mam małą aplikację, która po prostu imituje ruchy myszy.

Otwierasz kilka przeglądarek i kiedy poruszasz myszą, twoje działania są rejestrowane w innych przeglądarkach. Przesuwa mały kwadrat. Trochę fajny. Jednak po otwarciu tego na moim iPadzie (iOS6) nic! Gniazda nie łączą się. Wprowadziłem nawet komunikat alarmowy do zdarzenia connect i nic.

Działa w IE, FF i Chrome na moim laptopie. Jedyna różnica polega na tym, że moja maszyna dev używa localhost, podczas gdy iPad używa adresu IP mojej maszyny. Jednak po podłączeniu do mojego lokalnego adresu IP na moim laptopie nadal działa. Po prostu nie w Safari/iPadzie.

Oto mój serwer.

var app = require('http').createServer(handler), 
     io = require('socket.io').listen(app), 
     fs = require('fs'); 


    app.listen(80); 

    function handler(req, res) { 
     var file = __dirname + '/public/index.html'; 
     fs.readFile(file, 
      function(err, data) { 
       if(err) { 
        res.writeHead(500); 
        return res.end('Error loading index.html'); 
       } 

       res.writeHead(200); 
       res.end(data); 
      } 
     ); 
    } 


    var rooms = ['abc', 'test1']; 

    var sockets = []; 
    io.sockets.on('connection', function(socket) { 
     sockets.push(socket); 

     socket.on('m', function(data) { 
      socket.broadcast.to(socket.room).emit('relay', {msg: 'MouseX: ' + data.x + ' MouseY: ' + data.y, x: data.x, y: data.y}); 
     }); 

     socket.on('join', function(room) { 
      socket.join(room); 
      socket.emit('updateStatus', {msg: 'Joined room ' + room}); 
      console.log('Joined room ' + room); 
     }); 

    }); 

Oto mój klient:

<!doctype html> 
<html> 
    <head> 
     <style> 
      body { 
       padding: 40px; 
      } 
      #cursor { 
       background:white; 
       border:1px solid black; 
       color: white; 
       display: block; 
       height:24px; 
       padding:6px; 
       position:absolute; 
       width:24px; 
       z-index:20; 
      } 
     </style> 
    </head> 
    <body> 

     <input id='msg' type='text' size='100' /><br /> 
     <input id='box' type='text' size='100' /> 
     <div id='cursor'></div> 

     <script src='/socket.io/lib/socket.io.js'></script> 
     <script> 
      var socket = io.connect('http://localhost'); 
      var b = document.getElementById('box'); 
      var m = document.getElementById('msg'); 
      var c = document.getElementById('cursor'); 

      // join custom room 
      socket.on('connect', function() { 
       socket.emit('join', 'abc'); 
      }); 

      // update status messages from server 
      socket.on('updateStatus', function(data) { 
       m.setAttribute('value', data.msg); 
      }); 

      socket.on('relay', function(data) { 
       b.setAttribute('value', data.msg); 
       c.style.left = parseInt(data.x) + 'px'; 
       c.style.top = parseInt(data.y) + 'px'; 
      }); 

      document.onmousemove = function(event) { 
       event = event || window.event; 
       socket.emit('m', {x: event.clientX, y: event.clientY}); 
      } 


     </script> 

    </body> 
</html> 
+0

Uh, dlaczego głosowanie w dół? – cbmeeks

+0

doskonale trafne pytanie - to też mnie potknęło! –

Odpowiedz

16

localhost jest lokalny na maszynie. Twój adres IP powinien używać adresu IP lub nazwy domeny:

coś takiego: io.connect ("192.168.1.110"); lub io.connect ("test.myapp.com");

+0

DUUUUUUHHHHH !!! Przybiłeś to. Jestem idiotą. LOL. Dzięki! – cbmeeks

Powiązane problemy