Node.js socket.io服务器未侦听

Node.js socket.io服务器未侦听,node.js,websocket,socket.io,Node.js,Websocket,Socket.io,我将node.js和socket.io用于一个简单的应用程序。我的浏览器正在从服务器接收数据,但服务器没有从客户端(浏览器)接收数据。可能是客户端\u数据不工作的事件侦听器。这是服务器: var http = require("http"); var url = require("url"); var io = require('socket.io'); function start(route) { function onRequest(request, response) {

我将node.js和socket.io用于一个简单的应用程序。我的浏览器正在从服务器接收数据,但服务器没有从客户端(浏览器)接收数据。可能是客户端\u数据不工作的事件侦听器。这是服务器:

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>

var socket=io.connect();
socket.on('date',函数(数据){
document.getElementById(“日期”).innerHTML=data.date;
});
功能发送键(e){
emit('client_data',{'letter':String.fromCharCode(e.charCode)});
}
这是我们的socket.html文件

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

服务器io只接收连接事件。从客户端发送的
client\u数据
事件由传递到
连接
回调的
socket
对象听到,而不是
服务器io
对象听到

您需要使用
socket.on(“client_data”,…)
并将该代码移动到
连接中


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

发生此错误的原因是
.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);
  });
});