broadcast命令行聊天室

本文介绍了一个基于Node.js的简易聊天室实现方案。该聊天室利用了Node.js的net模块进行客户端与服务器之间的通信,并通过events模块来管理客户端的连接、消息广播及断开连接等事件。文章展示了如何创建服务器监听客户端连接、如何处理客户端发送的消息并将其广播给其他在线用户,以及如何优雅地处理客户端断开连接的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


var events = require('events');
var net = require('net');
var channel = new events.EventEmitter();
channel.clients = [];
channel.subscriptions = {};

channel.setMaxListeners(1);

channel.on('join',function(id,client){
	this.clients[id] = client;
	this.subscriptions[id] = function(senderId,message){
		if(id != senderId){
			let str = senderId+':\n'+message+'----------\n';
			this.clients[id].write(str);
		}
	}
	this.on('broadcast',this.subscriptions[id]);
});
channel.on('leave',function(id){
	channel.removeListener(('broadcast',this.subscriptions[id]));
	channel.emit('broadcast',id,id+'has left the chat.\n');
});
channel.on('shutdown',function(){
	channel.emit('broadcast','','chat has shut down.\n');
	channel.removeAllListeners('broadcast');
})

var server = net.createServer(function(client){
	var id = client.remoteAddress + ':' + client.remotePort;
	console.log('client connected:'+id)
	channel.emit('join',id,client);
	// client.on('connect',function(){
	// 	channel.emit('join',id,client);
	// });
	client.on('data',function(data){
		data = data.toString();
		if(data == 'shutdown\r\n'){
			channel.emit('shutdown');
		}
		channel.emit('broadcast',id,data);
	});
	client.on('close',function(){
		channel.emit('leave',id);
	})
});
server.listen(8888);


加入聊天室,bash键入

telnet localhost 8888



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值