nodejsは、TCPサーバ端とクライアントのチャット機能の例を簡単に実現する.

2769 ワード

本明細書の例は、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);

クライアント

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});
})();

ここで述べたように、皆さんのnodejsプログラムの設計に役に立ちます.