深入解读JavaScript

用Node.js的net创建TCP服务进行通信

2018-10-10  本文已影响0人  悟C

Node.js中的net模块提供了对TCP协议的封装,使用net模块可以轻松的构建一个TCP服务器,或构建一个连接TCP服务器的客户端。

我们通过一个实例学习net模块,下面我们用net模块创建一个TCP服务进行通信,用telnet进行群聊:

const events = require('events');
const net = require('net');
const channel = new events.EventEmitter();

channel.clients = {};
channel.subscription = {};

channel.on('join', function(id, client) {
  this.clients[id] = client;
  this.subscription[id] = (senderId, message) => {
    if (id != senderId) {
      this.clients[id].write(id + ': ' + message);
    }
  };
  this.clients[id].write(`当前已加入的人数${this.listeners('broadcast').length + 1}\n`);
  this.on('broadcast', this.subscription[id]);
});

channel.on('leave', function(id) {
  channel.removeListener(
    'broadcast', this.subscription[id]
  );
  channel.emit('broadcast', id, `${id} has left the chatroom.\n`);
});

const server = net.createServer(client => {
  const id = `${client.remoteAddress}:${client.remotePort}`;
  
  console.log('有TCP客服端连接入');

  channel.emit('join', id, client);

  client.on('data', data => {
    data = data.toString();
    channel.emit('broadcast', id, data);
  });

  client.on('close', () => {
    console.log('有人离开');
    channel.emit('leave', id);
  });
});

server.listen(8888, function() {
  console.log('开启8888端口');
});

通过终端输入:

telnet localhost 8888
WechatIMG37.png

只要连接到localhost 8888,我们可以开始聊天了。

上一篇下一篇

猜你喜欢

热点阅读