2013-06-03 46 views
12

Tôi có ví dụ sau đây về nghe kết nối và sự kiện dữ liệu, để phản hồi kết quả quay lại các ứng dụng khách telnet khác đang nghe trên cổng 8888. Các phiên telnet của tôi kết nối với locahost tốt, nhưng không có đầu ra được lặp lại. Tôi đánh đầu vào một bức tường gạch cố gắng tìm ra điều gì sai. Việc thực hiện thậm chí không nhận được như xa như sự kiện 'kết nối'.Sự kiện mạng Node.js không kích hoạt

/server.js

var events = require('events'); 
    var net = require('net'); 
    var channel = new events.EventEmitter(); 
    channel.clients = {}; 
    channel.subscriptions = {}; 
    channel.on('join', function (id, client) { 
     this.clients[id] = client; 
     this.subscriptions[id] = function (senderId, message) { 
      if (id != senderId) { 
       this.clients[id].write(message); 
      } 
     } 
     this.on('broadcast', this.subscriptions[id]); 
    }); 
    var server = net.createServer(function (client) { 
     var id = client.remoteAddress + ':' + client.remotePort; 
     console.log(id); 
     client.on('connect', function() { 
      console.log('A new connection was made'); 
      channel.emit('join', id, client); 
     }); 
     client.on('data', function (data) { 
      data = data.toString(); 
      channel.emit('broadcast', id, data); 
     }); 
    }); 

    server.listen(8888); 

sau đó tôi chạy trong dòng lệnh

node server.js 
telnet 127.0.0.1 8888 

Trả lời

13

Khi callback để net.createServer được gọi, đó là vì một sự kiện tiềm ẩn connection. Vì vậy, mã của bạn sẽ trông giống như sau:

var server = net.createServer(function (client) { 

    // when this code is run, the connection has been established 

    var id = client.remoteAddress + ':' + client.remotePort; 
    console.log('A new connection was made:', id); 

    channel.emit('join', id, client); 

    client.on('data', function(data) { 
    ... 
    }); 

    client.on('end', function() { 
    ... 
    }); 
}); 
+0

Cảm ơn bạn - đã xóa toàn bộ nội dung. – metalaureate

4

manual có điều này để nói;

net.createServer ([tùy chọn], [connectionListener])
Tạo một máy chủ TCP mới. Đối số connectionListener được đặt tự động làm trình lắng nghe cho sự kiện 'kết nối'.

Nói cách khác, function (client) { của bạn đã nhận được sự kiện kết nối và thêm người nghe vào nó khi nó đã được gửi đi không còn hiệu lực.

Các vấn đề liên quan