2015-07-13 108 views
0

我按照此處提供的教程: http://www.davidado.com/2013/12/10/node-js-for-user-alert-push-notifications/ 目標是允許某人向其他用戶發送消息。Node.js和Socket.io出錯

節點已安裝並正常工作。我也安裝了Socket.io。

當我運行

node server.js 

我有這樣的錯誤:

TypeError: undefined is not a function 
    at Socket.<anonymous> (/root/nodeapp/server.js:11:39) 

的server.js(服務器端)是這樣的:

var io = require('socket.io').listen(5120); 

io.sockets.on('connection', function (socket) { 

    socket.on('join_room', function (data) { 
     if (typeof socket !== 'undefined') { 
     // data.id should be set if user is logged in 
     if (typeof data.id !== 'undefined' && data.id > 0) { 
      // Check if socket is already in room 
      var roomlist = io.sockets.clients(data.id); // returns Socket instances of all clients in the room 
      var occupantSocket; 
      if (typeof roomlist[0] !== 'undefined') { 
       // Should only be one socket in a private room 
       occupantSocket = roomlist[0]; 
      } 
      if (socket !== occupantSocket) { 
       // Socket hasn't joined before so join it now 
       socket.join(data.id); 
      } 
     } else { 
      // User ID isn't set so disconnect the socket 
      socket.disconnect(); 
     } 
     } 
    }); 

    socket.on('send_msg', function (data) { 
     if (typeof socket !== 'undefined') { 
     if (typeof data.id_sendee !== 'undefined' && data.id_sendee > 0) { 
      // Check if anyone is in the room before broadcasting 
      var roomlist = io.sockets.clients(data.id_sendee); 
      if (typeof roomlist[0] !== 'undefined') { 
       // Push alerts aren't that critical so use volatile 
       socket.broadcast.to(data.id_sendee).volatile.emit(
        'newalert', 
        {sender: data.sender, msg: data.msg }); 
      } 
     } else { 
      socket.disconnect(); 
     } 
     } 
    }); 
}); 
console.log("Hello , just checking!"); 

11號線是這一個:

var roomlist = io.sockets.clients(data.id); //返回的Socket所有客戶端的 情況下,在房間裏

客戶端,一收到消息:

<html> 
    <head> 
     <title>Test Node</title> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 


<script src="https://cdn.socket.io/socket.io-1.3.5.js"></script> 
<script type="text/javascript"> 
var socket = io.connect('http://IPAdressofMyServer:5120'); 
socket.emit('join_room', { id: 234 }); 

// Listen for 'newalert' event from node server at server.js 
socket.on('newalert', function (data) { 
alert(data.msg + ' from ' + data.sender); 
}); 
</script> 
</head> 
<body> 
</body> 
</html> 

當我啓動節點server.js在我的控制檯,有沒有錯誤,但只要刷新客戶端(使用上面的代碼),就會觸發錯誤。

任何想法是什麼問題? 感謝您的幫助!

回答