Node.js 远程登录聊天服务器

Posted

技术标签:

【中文标题】Node.js 远程登录聊天服务器【英文标题】:Node.js telnet chat server 【发布时间】:2016-02-04 23:05:48 【问题描述】:

我正在尝试使用 node.js 制作一个 telnet 聊天服务器

当我打开多个终端并输入文本时,什么也没有出现。 即文本不会传输到其他终端

我打开多个终端并进入

telnet 127.0.0.1 8888

然后开始输入,但什么也没有出现

var events = require('events');
var net = require('net');

var channel = new events.EventEmitter();
channel.clients = ;
channel.subscriptions = ;

channel.on('join', function(id, client) 
    console.log("join");
    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) 
    console.log("createServer");
    var id = client.remoteAddress + ':' + client.remotePort;
    client.on('connect', function() 
        console.log("connect");
        channel.emit('join', id, client);
    );
    client.on('data', function(data) 
        console.log("data");
        data = data.toString();
        channel.emit('broadcast', id, data);
    );
);

server.listen(8888);

【问题讨论】:

【参考方案1】:

我已经简化(某种程度)你的代码来展示如何向用户发送消息:

var events = require('events');
var net = require('net');

clients = [];

function randomInt (low, high) 
    return Math.floor(Math.random() * (high - low) + low);

function generateId(length) 
    var output = "";
    for(var i = 0;i<length;i++) 
        output += randomInt(0,9);
    
    return output;


function sendToAll(data,sender) 
    console.log(clients.length);
    var size = clients.length;
    for(i=0;i<size;i++) 
        if(sender.unique_id != clients[i].unique_id) 
            clients[i].write(data);
        
    


var server = net.createServer(function(client) 
    console.log("New client: " + client.remoteAddress);
    client.write("Welcome!\r\n");
    client.unique_id = generateId(10);
    clients.push(client);

    client.on('data', function(data) 
        data = data.toString();
        console.log(data);
        sendToAll(data,client);
    );
);

server.listen(8888);

【讨论】:

以上是关于Node.js 远程登录聊天服务器的主要内容,如果未能解决你的问题,请参考以下文章

node.js 远程调试debug产线环境代码

如何远程登录到局域网中的计算机

如何在 heroku 上远程调试 node.js 应用程序?

原生nodejs编写在线聊天系统

关于apache的Struts2上传机制漏洞

远程登录服务器后,上传压缩包失败