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 相关文章推荐
PHPStorm 2020.1 调试 Nodejs的多种方法详解
Sep 17 NodeJs
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
NodeJS远程代码执行
Aug 28 NodeJs
nodejs处理图片的中间件node-images详解
May 08 NodeJs
详解IWinter 一个路由转控制器的 Nodejs 库
Nov 15 NodeJs
使用nodejs+express实现简单的文件上传功能
Dec 27 NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodeJS服务器的创建和重新启动的实现方法
May 12 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 NodeJs
NodeJS和浏览器中this关键字的不同之处
Mar 03 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
espresso double下 咖啡粉超细时 饼压力对咖啡的影响
2021/03/03 冲泡冲煮
Yii2中datetime类的使用
2016/12/17 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
2017/08/10 PHP
tp5.1 框架路由操作-URL生成实例分析
2020/05/26 PHP
jQuery动态添加的元素绑定事件处理函数代码
2011/08/02 Javascript
用JS判断IE版本的代码 超管用!
2011/08/09 Javascript
JS格式化数字保留两位小数点示例代码
2013/10/15 Javascript
JavaScript 事件对象介绍
2015/04/13 Javascript
js实现简易的单数字随机抽奖(0-9)
2020/03/19 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
js实现开启密码大写提示
2016/12/21 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
BootStrap Datetimepicker 汉化的实现代码
2017/02/10 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
js中怎么判断两个字符串相等的实例
2019/01/17 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
[01:29:17]RNG vs Liquid 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
Python3 pip3 list 出现 DEPRECATION 警告的解决方法
2019/02/16 Python
python 标准差计算的实现(std)
2019/07/29 Python
浅谈django 重载str 方法
2020/05/19 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
纯css3制作煽动翅膀的蝴蝶的示例
2018/04/23 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
意大利巧克力店:Chocolate Shop
2019/07/24 全球购物
党员自我评价分享
2013/12/13 职场文书
职工趣味运动会方案
2014/02/10 职场文书
仓管员岗位责任制
2014/02/19 职场文书
信息与计算机科学职业规划范文:成为一艘有方向的船
2014/09/11 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
邀请书模板
2015/02/02 职场文书
2015年高考寄语或鼓励的话
2015/03/23 职场文书
自己搭建resnet18网络并加载torchvision自带权重的操作
2021/05/13 Python
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电