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中自定义事件实例
Jun 20 NodeJs
轻松创建nodejs服务器(9):实现非阻塞操作
Dec 18 NodeJs
NodeJS中的MongoDB快速入门详细教程
Nov 11 NodeJs
async/await与promise(nodejs中的异步操作问题)
Mar 03 NodeJs
angular2+nodejs实现图片上传功能
Mar 27 NodeJs
NodeJS创建最简单的HTTP服务器
May 15 NodeJs
nodeJS实现简单网页爬虫功能的实例(分享)
Jun 08 NodeJs
nodejs的路径问题的解决
Jun 30 NodeJs
详解nodejs解压版安装和配置(带有搭建前端项目脚手架)
Dec 06 NodeJs
nodejs基础之buffer缓冲区用法分析
Dec 26 NodeJs
Nodejs实现WebSocket代码实例
May 19 NodeJs
Nodejs环境实现socket通信过程解析
Jul 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
使用无限生命期Session的方法
2006/10/09 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
php常用字符串比较函数实例汇总
2014/11/24 PHP
php调用云片网接口发送短信的实现方法
2017/10/25 PHP
PHP如何使用cURL实现Get和Post请求
2020/07/11 PHP
js 加载时自动调整图片大小
2008/05/28 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
nodejs npm包管理的配置方法及常用命令介绍
2014/06/05 NodeJs
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
JS基于正则截取替换特定字符之间字符串操作示例
2017/02/03 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
vue下拉菜单组件(含搜索)的实现代码
2018/11/25 Javascript
微信小程序实现动态显示和隐藏某个控件功能示例
2018/12/14 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
Win7上搭建Cocos2d-x 3.1.1开发环境
2014/07/03 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
Python实现网页截图(PyQT5)过程解析
2019/08/12 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
python如何调用java类
2020/07/05 Python
通过python-pptx模块操作ppt文件的方法
2020/12/26 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
英国顶级足球鞋的领先零售商:Lovell Soccer
2019/08/27 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
应届毕业生个人自我评价
2013/09/20 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
幼儿园教师师德承诺书
2015/04/28 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
创业计划书之养殖业
2019/10/11 职场文书
图解上海144收音机
2021/04/22 无线电
pytorch 一行代码查看网络参数总量的实现
2021/05/12 Python
virtualenv隔离Python环境的问题解析
2022/06/21 Python