套接字.IO服务器未监听



我使用node.js和socket。我的浏览器很好地从服务器接收数据,但服务器没有从客户端(浏览器)接收数据。可能是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>

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

出现此错误是因为.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);
  });
});

server_io只接收connection事件。从客户端发送的client_data事件被传递给connection回调的socket对象听到,而不是server_io对象。

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

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

相关内容

  • 没有找到相关文章

最新更新