2013-07-01 71 views
0

我正在开发如何使用Node.js和Socket.io聊天应用。 这是我的代码。|聊天应用程序中使用Socket.io和Node.js的

socket.js

var io = require('socket.io').listen(8001); 
var http = require('http'); 
var url = require('url'); 
var fs = require('fs'); 
// open the socket connection 
io.sockets.on('connection', function (socket) { 

    // listen for the chat even. and will recieve 
    // data from the sender. 
    socket.on('chat', function (data) { 

     // default value of the name of the sender. 
     var sender = 'unregistered'; 

     // get the name of the sender 
     socket.get('nickname', function (err, name) { 
     console.log('Chat Message By: ', name); 
     console.log('error ', err); 
     sender = name; 
     }); 

     // broadcast data recieved from the sender 
     // to others who are connected, but not 
     // from the original sender. 
     socket.broadcast.emit('chat', { 
     msg : data, 
     msgr : sender 
     }); 
    }); 

    // listen for user registrations 
    // then set the socket nickname to 
    socket.on('register', function (name) { 

     // make a nickname paramater for this socket 
     // and then set its value to the name recieved 
     // from the register even above. and then run 
     // the function that follows inside it. 
     socket.set('nickname', name, function() { 

     // this kind of emit will send to all! :D 
     io.sockets.emit('chat', { 
      msg : "Hello " + name + '!', 
      msgr : "Mr.Server" 
     }); 
     }); 
    }); 

}); 

的index.html

<html> 
    <head> 
     <script src="/socket.io/socket.io.js"></script> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.js"></script> 
      <script> 
       var name = ''; 
     var socket = io.connect('http://localhost:8001'); 


     // at document read (runs only ones). 
     $(document).ready(function(){ 


      // on click of the button (jquery thing) 
      // the things inside this clause happen only when 
      // the button is clicked. 
      $("button").click(function(){ 

       // just some simple logging 
       $("p#log").html('Sent message: ' + $("input#msg").val()); 

       // send message on inputbox to server 
       socket.emit('chat', $("input#msg").val()); 


       $("p#data_recieved").append("<br />\r\n" + name + ': ' + $("input#msg").val()); 

       // then we empty the text on the input box. 
       $("input#msg").val(''); 
      }); 

      $("#btnSubmit").click(function(){ 
      alert("Disconnected"); 
      //socket.clients[kickedUserSocketId].onDisconnect(); 
      socket.close(); 
    }); 

      // ask for the name of the user, ask again if no name. 
      while (name == '') { 
       name = prompt("What's your name?",""); 
      } 

      // send the name to the server, and the server's 
      // register wait will recieve this. 
      socket.emit('register', name); 
     }); 



     // listen for chat event and recieve data 
     socket.on('chat', function (data) { 

      // print data (jquery thing) 
      $("p#data_recieved").append("<br />\r\n" + data.msgr + ': ' + data.msg); 

      // we log this event for fun :D 
      $("p#log").html('got message: ' + data.msg); 

     }); 

     socket.emit('forceDisconnect'); 
     </script> 
    </head> 
    <body> 
     <input type="text" id="msg"></input> 
     <button>Click me</button> 
     <p id="log"></p> 
     <p id="data_recieved"></p> 
    </body> 

<input id = "btnSubmit" type="submit" value="Disconnect"/> 


</html> 

我正在从命令提示符第一socket.js。之后,我在浏览器中运行.html文件2次。现在2个用户可以通过浏览器聊天。但是,当我试图把我的.js文件和HTML文件上,我已经使用FileZila和运行.js文件中创建的服务器,它在运行,但是当我试图运行在服务器端的.html文件(在这种情况下FileZila ),通过给出服务器的IP地址和端口号未运行。你能告诉我有什么问题吗?

+0

你能澄清一下吗? “在服务器端运行.html文件”是什么意思?你怎么看到“它没有运行”?是否有机会忘记确保'socket.io.js'在服务器端的路径中? – CFrei

+0

run.html表示客户端将通过提供IP地址在浏览器上运行它。 –

+0

socket.io.js我必须进行更改吗? –

回答

0

这似乎并不成为一个nodejs -issue。 您有应该可以访问通过IP的东西,如“http://your.domain.or.ip:80”的服务器。

如果您的浏览器中出现“无法连接”,请确保没有防火墙,并且该端口(例如:80)可从您的浏览器位置访问(又称为“您的PC “)。请注意,您在端口8001上使用套接字服务,并且您的Web服务器可能在另一个端口上运行?确保两个端口都打开。

如果您收到一个空白页,请检查浏览器JavaScript错误消息。

您有可能忘记上传'/socket.io/'目录中的文件'socket.io.js'。尝试直接下载该文件以查看您的服务器是否提供服务。

相关问题