2012-10-17 3 views
9

Ich dachte, der ganze Punkt von socket.io war, sich keine Gedanken über moderne Browser machen zu müssen? lolWarum funktioniert meine node.js/socket.io App nicht auf iOS6?

Wie auch immer, ich bin neu in Socket-Programmierung. Ich habe eine kleine App, die Mausbewegungen einfach nachahmt.

Sie öffnen mehrere Browser und wenn Sie die Maus bewegen, werden Ihre Aktionen in den anderen Browsern aufgezeichnet. Es bewegt sich ein kleines Quadrat. Irgendwie cool. Allerdings, wenn ich es auf meinem iPad (iOS6) öffne nichts! Sockets verbindet nicht. Ich habe sogar eine Alarmmeldung in das Ereignis connect und nichts gestellt.

Funktioniert in IE, FF und Chrome einfach gut auf meinem Laptop. Der einzige Unterschied ist, dass mein Dev-Gerät localhost verwendet, während das iPad die IP meines Computers verwendet. Wenn ich jedoch eine Verbindung zu meiner lokalen IP-Adresse auf meinem Laptop herstelle, funktioniert es immer noch. Nur nicht in Safari/iPad.

Hier ist mein Server.

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); 
     }); 

    }); 

Hier ist mein Kunde:

<!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, warum die down vote? – cbmeeks

+0

perfekt gültige Frage - das hat mich auch gestolpert! –

Antwort

16

Localhost ist lokal an der Maschine. Ihre IP-Adresse sollte eine IP-Adresse oder einen Domänennamen verwenden:

so etwas wie: io.connect ('192.168.1.110'); oder io.connect ('test.myapp.com');

+0

DUUUUUUHHHHH !!! Du hast den Nagel auf den Kopf getroffen. Ich bin ein Idiot. LOL. Vielen Dank! – cbmeeks