socket.io服务器没有监听

时间:2014-06-26 18:51:49

标签: node.js websocket socket.io

我正在使用node.js和socket.io来创建一个简单的应用程序。我的浏览器很好地从服务器接收数据,但服务器没有从客户端(浏览器)接收。可能是client_data无法正常工作的事件监听器。这是服务器:

var http = require("http");
var url = require("url");
var io = require('socket.io');

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    route(pathname, response);
  }
  var server = http.createServer(onRequest);
  server.listen(8888);
  var server_io = io.listen(server);
  server_io.on('connection', function(socket){
     //send data to client
    setInterval(function(){
        socket.emit('date', {'date': new Date()});
    }, 1000);
  });
  //recieve client data
  server_io.on('client_data', function(data){ //May be it is not listening
    process.stdout.write(data.letter); // not working
    //console.log(data.letter); not working
  });
  console.log("Server has started.");
}

exports.start = start;

客户代码:

<html>
  <head>
    <script src="/socket.io/socket.io.js"></script>
  </head>
  <body>
    <script>
      var socket = io.connect();
    socket.on('date', function(data){
    document.getElementById("date").innerHTML = data.date;
    });

    function sendKey(e){
      socket.emit('client_data', {'letter': String.fromCharCode(e.charCode)});
    }
    </script>
    <div id="date">This is our socket.html file</div>
    <textarea id="text" onKeyPress="sendKey(event)"></textarea>
  </body>
</html>

我的服务器代码有什么问题?

2 个答案:

答案 0 :(得分:1)

发生此错误是因为.on('client_data')必须绑定到socket,而不是server_io。代码可能如下所示:

server_io.on('connection', function(socket){
  setInterval(function(){
    socket.emit('date', {'date': new Date()});
  }, 1000);
  socket.on('client_data', function(data){
    process.stdout.write(data.letter);
  });
});

答案 1 :(得分:0)

server_io仅收到connection个事件。传递到client_data回调的socket对象听到客户端发送的connection事件,而不是server_io对象。

您需要使用socket.on("client_data", ...);并将该代码移至connection回调中。

socket对象连接到特定的客户端网页实例,并且它接收仅由该页面发送的消息。每次新的客户端页面连接时,都会创建一个新的socket对象,并将其作为参数传递给connection处理函数。