我有以下监听连接和数据事件的示例,将结果回显给侦听端口8888的其他telnet客户端。我的telnet会话连接到locahost很好,但没有回显输出。我撞到了一堵砖墙,试图找出问题所在。执行甚至没有达到'connect'事件。
/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);
然后我在命令行中运行
node server.js
telnet 127.0.0.1 8888
答案 0 :(得分:13)
调用net.createServer
的回调时,这是因为隐式connection
事件。所以你的代码应该是这样的:
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() {
...
});
});
答案 1 :(得分:4)
manual有这个说法;
net.createServer([options],[connectionListener])
创建一个新的TCP服务器。 connectionListener参数自动设置为'connection'事件的侦听器。
换句话说,您的function (client) {
已经收到连接事件,并且在已经调度它时添加一个侦听器没有进一步的效果。