客户端加入时未调用事件 'connect'
Event 'connect' not being called when a client joins
对于下面的 publish/subscribe 示例,我无法让它工作。
我 运行 脚本,然后我用
启动命令 window
telnet 127.0.0.1 8888
然后命令window完全变黑。我什至没有看到预期的 joined!
消息,但是当我输入内容时,我确实得到了 written
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;
client.on('connect', function(){
channel.emit('join', id, client);
console.log('joined!')
});
client.on('data', function(data){
data = data.toString();
channel.emit('broadcast', id, data);
console.log('written');
});
});
server.listen(8888);
我正在使用 Windows 10 和通用客户端 telnet 功能。
我也开了8888端口,虽然是运行 in 'localhost'
我错过了什么吗?或者是什么原因因为 'connect' 事件没有被引发?(这引发了 channel.emit('join', id, client)
从未执行
client.on('connect', ...)
对服务器端没有意义(仅客户端)。您拥有该行的回调是客户端连接时调用的回调。所以就这样做:
var server = net.createServer(function(client){
var id = client.remoteAddress + ':' + client.remotePort;
channel.emit('join', id, client);
console.log('joined!')
client.on('data', function(data){
data = data.toString();
channel.emit('broadcast', id, data);
console.log('written');
});
});
对于下面的 publish/subscribe 示例,我无法让它工作。 我 运行 脚本,然后我用
启动命令 windowtelnet 127.0.0.1 8888
然后命令window完全变黑。我什至没有看到预期的 joined!
消息,但是当我输入内容时,我确实得到了 written
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;
client.on('connect', function(){
channel.emit('join', id, client);
console.log('joined!')
});
client.on('data', function(data){
data = data.toString();
channel.emit('broadcast', id, data);
console.log('written');
});
});
server.listen(8888);
我正在使用 Windows 10 和通用客户端 telnet 功能。 我也开了8888端口,虽然是运行 in 'localhost'
我错过了什么吗?或者是什么原因因为 'connect' 事件没有被引发?(这引发了 channel.emit('join', id, client)
从未执行
client.on('connect', ...)
对服务器端没有意义(仅客户端)。您拥有该行的回调是客户端连接时调用的回调。所以就这样做:
var server = net.createServer(function(client){
var id = client.remoteAddress + ':' + client.remotePort;
channel.emit('join', id, client);
console.log('joined!')
client.on('data', function(data){
data = data.toString();
channel.emit('broadcast', id, data);
console.log('written');
});
});