2012-10-17 31 views
9

我認爲socket.io的全部重點是不必擔心現代瀏覽器?大聲笑爲什麼我的node.js/socket.io應用程序無法在iOS6上運行?

無論如何,我是新來的套接字編程。我有一個簡單模仿鼠標移動的小應用程序。

您打開多個瀏覽器,當您移動鼠標時,您的操作將被記錄在其他瀏覽器中。它移動了一個小方塊。有點酷。但是,當我在iPad(iOS6)上打開它時,什麼都沒有!套接字未連接。我甚至在connect事件中發出了一條警告消息,但沒有任何消息。

在我的筆記本電腦上工作的IE,FF和Chrome很好。唯一的區別是我的開發機器使用localhost而iPad使用我的機器的IP。但是,當我連接到筆記本電腦上的本地IP時,它仍然有效。只是不在Safari/iPad。

這是我的服務器。

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

    }); 

這裏是我的客戶:

<!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

呃,爲什麼要投票? – cbmeeks

+0

完全有效的問題 - 這一個也絆倒了我! –

回答

16

本地主機是本地機器。你的IP應該使用IP地址或域名:

類似於: io.connect('192.168.1.110'); 或io.connect('test.myapp.com');

+0

DUUUUUUUHHHHH !!!你釘了它。我是個白癡。大聲笑。謝謝! – cbmeeks

相關問題