2012-10-17 33 views
9

Tôi nghĩ rằng toàn bộ điểm của socket.io là không phải lo lắng về các trình duyệt hiện đại? lolTại sao ứng dụng node.js/socket.io của tôi không hoạt động trên iOS6?

Dù sao, tôi mới làm quen với lập trình socket. Tôi có một ứng dụng nhỏ chỉ đơn giản là bắt chước chuyển động của chuột.

Bạn mở nhiều trình duyệt và khi bạn di chuyển chuột, hành động của bạn được ghi lại trong các trình duyệt khác. Nó di chuyển một hình vuông nhỏ. Khá ngầu. Tuy nhiên, khi tôi mở nó trên iPad của tôi (iOS6) không có gì! Ổ cắm không kết nối. Tôi thậm chí còn đặt một thông điệp cảnh báo trong sự kiện connect và không có gì.

Làm việc trong IE, FF và Chrome tốt trên máy tính xách tay của tôi. Sự khác biệt duy nhất là máy dev của tôi sử dụng localhost trong khi iPad sử dụng IP của máy của tôi. Tuy nhiên, khi tôi kết nối với IP cục bộ của mình trên máy tính xách tay, nó vẫn hoạt động. Chỉ cần không có trong Safari/iPad.

Đây là máy chủ của tôi.

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

    }); 

Đây là khách hàng của tôi:

<!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, tại sao bỏ phiếu xuống? – cbmeeks

+0

câu hỏi hoàn toàn hợp lệ - câu hỏi này cũng khiến tôi băn khoăn! –

Trả lời

16

Localhost là địa phương để máy. Bạn nên sử dụng địa chỉ IP hoặc tên miền:

giống như sau: io.connect ('192.168.1.110'); hoặc io.connect ('test.myapp.com');

+0

DUUUUUUHHHHH !!! Bạn đóng đinh nó. Tôi là một thằng ngốc. LOL. Cảm ơn! – cbmeeks

Các vấn đề liên quan