Rumah > hujung hadapan web > tutorial js > 使用nodejs如何实现聊天功能

使用nodejs如何实现聊天功能

亚连
Lepaskan: 2018-06-13 17:30:04
asal
2366 orang telah melayarinya

这篇文章主要介绍了nodejs简单实现TCP服务器端和客户端的聊天功能,结合实例形式分析了nodejs基于TCP协议实现的聊天程序客户端与服务器端具体步骤与相关操作技巧,代码备有较为详尽的注释便于理解,需要的朋友可以参考下

本文实例讲述了nodejs简单实现TCP服务器端和客户端的聊天功能。分享给大家供大家参考,具体如下:

服务器端

var net = require('net');
var server = net.createServer();
//聚合所有客户端
var sockets = [];
//接受新的客户端连接
server.on('connection', function(socket){
  console.log('got a new connection');
  sockets.push(socket);
  //从连接中读取数据
  socket.on('data', function(data){
    console.log('got data:', data);
    //广播数据
    //每当一个已连接的用户输入数据,就将这些数据广播给其他所有已连接的用户
    sockets.forEach(function(otherSocket){
      if (otherSocket !== socket){
        otherSocket.write(data);
      }
    });
    //删除被关闭的连接
    socket.on('close', function(){
      console.log('connection closed');
      var index = sockets.indexOf(socket);
      sockets.splice(index, 1);
    });
  });
});
server.on('error', function(err){
  console.log('Server error:', err.message);
});
server.on('close', function(){
  console.log('Server closed');
});
server.listen(4000);
Salin selepas log masuk

客户端

var net = require('net');
var port = 4000;
var quitting = false;
var conn;
var retryTimeout = 3000;  //三秒,定义三秒后重新连接
var retriedTimes = 0;  //记录重新连接的次数
var maxRetries = 10;  //最多重新连接十次
process.stdin.resume(); //process.stdin流来接受用户的键盘输入,这个可读流初始化时处于暂停状态,调用流上的resume()方法来恢复流
process.stdin.on('data', function(data){
  if (data.toString().trim().toLowerCase() === 'quit'){
    quitting = true;
    console.log('quitting');
    conn.end();
    process.stdin.pause();
  } else {
    conn.write(data);
  }
});
//连接时设置最多连接十次,并且开启定时器三秒后再连接
(function connect() {
  function reconnect() {
    if (retriedTimes >= maxRetries) {
      throw new Error('Max retries have been exceeded, I give up.');
    }
    retriedTimes +=1;
    setTimeout(connect, retryTimeout);
  }
  conn = net.createConnection(port);
  conn.on('connect', function() {
    retriedTimes = 0;
    console.log('connect to server');
  });
  conn.on('error', function(err) {
    console.log('Error in connection:', err);
  });
  conn.on('close', function() {
    if(! quitting) {
      console.log('connection got closed, will try to reconnect');
      reconnect();
    }
  });
  //打印
  conn.pipe(process.stdout, {end: false});
})();
Salin selepas log masuk

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

详解如何实现vuex(详细教程)

通过vue.js实现微信支付

在Vue2.0中实现用户权限控制

Vue组件和Route的生命周期(详细教程)

利用SpringMVC解决vue跨域请求

Atas ialah kandungan terperinci 使用nodejs如何实现聊天功能. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan