[英]Node.js telnet chat server
I am trying to make a telnet chat server using node.js 我正在尝试使用node.js制作telnet聊天服务器
nothing appears when I open multiple terminals and enter text. 当我打开多个终端并输入文本时,没有任何显示。 ie the text is not transmitted to the other terminal 即文本不会传输到另一个终端
I open serveral terminals and enter 我打开服务器终端并输入
telnet 127.0.0.1 8888
then start typing but nothing appears 然后开始输入,但什么也没出现
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);
I have simplified (sort of) your code to show how to send messages to users: 我简化了您的代码,以显示如何向用户发送消息:
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.