2012-10-17 30 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

相关问题