客户端加入时未调用事件“连接”

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/…。 createServerconnect 事件的回调。如果我理解正确的话。

以上是关于客户端加入时未调用事件“连接”的主要内容,如果未能解决你的问题,请参考以下文章

易语言 客户端如何判断与服务器掉线

在 IIS 上将客户端证书选项设置为“已接受”时未调用 CustomCertificateValidator

IOCP AcceptEx 在连接时未创建完成

Ktor App 部署到 AppEngine 时未调用 Main 方法

打开 afxMessageBox 时未调用 mfc 事件

socket.io 客户端在本机反应中接收对同一事件的多个调用