客户端加入时未调用事件“连接”
Posted
技术标签:
【中文标题】客户端加入时未调用事件“连接”【英文标题】:Event 'connect' not being called when a client joins 【发布时间】:2015-11-05 14:36:30 【问题描述】:对于以下发布/订阅示例,我无法使其工作。 我运行脚本,然后用
启动命令窗口远程登录 127.0.0.1 8888
然后命令窗口完全变黑。我什至没有看到预期的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。 我也打开了 8888 端口,虽然它是在 'localhost' 中运行的
我错过了什么吗?或者是什么原因因为它没有被引发'connect'事件?(这会引发channel.emit('join', id, client)
永远不会执行
【问题讨论】:
好吧,这段代码取自一本关于学习 NodeJS 的书,预期的结果是一个用于 telnet 侦听器的小型聊天服务器 @KirillSlatin 你在哪里看到关于 WebSockets 的问题? @mscdex,你是对的,我的错 【参考方案1】: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');
);
);
【讨论】:
你是对的。我还检查了这个链接***.com/questions/19342910/…。createServer
是connect
事件的回调。如果我理解正确的话。以上是关于客户端加入时未调用事件“连接”的主要内容,如果未能解决你的问题,请参考以下文章
在 IIS 上将客户端证书选项设置为“已接受”时未调用 CustomCertificateValidator