nodejs简单实现TCP服务器端和客户端的聊天功能示例


Posted in NodeJs onJanuary 04, 2018

本文实例讲述了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);

客户端

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程序设计有所帮助。

NodeJs 相关文章推荐
使用Nodejs开发微信公众号后台服务实例
Sep 03 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
Nodejs实现多人同时在线移动鼠标的小游戏分享
Dec 06 NodeJs
PHP和NodeJs开发的应用如何共用Session
Apr 16 NodeJs
Nodejs获取网络数据并生成Excel表格
Mar 31 NodeJs
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
Nov 21 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
nodejs实现发出蜂鸣声音(系统报警声)的方法
Jan 18 NodeJs
Nodejs调用WebService的示例代码
Sep 29 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
详解NODEJS的http实现
Jan 04 #NodeJs
Nodejs中crypto模块的安全知识讲解
Jan 03 #NodeJs
nodejs+mongodb+vue前后台配置ueditor的示例代码
Jan 02 #NodeJs
nodejs操作mongodb的填删改查模块的制作及引入实例
Jan 02 #NodeJs
nodejs实现OAuth2.0授权服务认证
Dec 27 #NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 #NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 #NodeJs
You might like
php strlen mb_strlen计算中英文混排字符串长度
2009/07/10 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
2013/08/01 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
2016/12/05 PHP
锋利的jQuery jQuery中的DOM操作
2010/03/21 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
js插件方式打开pdf文件(浏览器pdf插件分享)
2013/12/20 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
Web安全测试之XSS实例讲解
2016/08/15 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
React简单介绍
2017/05/24 Javascript
vue.js路由跳转详解
2017/08/28 Javascript
微信小程序实现时间预约功能
2018/11/27 Javascript
python缩进区别分析
2014/02/15 Python
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
2015/04/05 Python
Python实现输出某区间范围内全部素数的方法
2018/05/02 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
Python通过socketserver处理多个链接
2020/03/18 Python
Django admin组件的使用
2020/10/24 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
比利时网上药店: Drogisterij.net
2017/03/17 全球购物
蛋白质世界:Protein World
2017/11/23 全球购物
超市营业员岗位职责
2013/12/20 职场文书
自主实习接收函
2014/01/13 职场文书
水利学院求职自荐书
2014/02/01 职场文书
五一促销活动总结
2014/07/01 职场文书
2014年医务科工作总结
2014/12/18 职场文书
就业推荐表导师评语
2014/12/31 职场文书
肖申克救赎观后感
2015/06/02 职场文书
一个都不能少观后感
2015/06/04 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
不要在HTML中滥用div
2021/05/08 HTML / CSS
Spring实现内置监听器
2021/07/09 Java/Android
Golang 并发编程 SingleFlight模式
2022/04/26 Golang