文档章节

nodejs简易聊天室

木头
 木头
发布于 2012/05/11 17:34
字数 245
阅读 3.1K
收藏 7

码上生花,ECharts 作品展示赛正式启动!>>>

第一个nodejs简易聊天室

var net = require('net');

var clients = [];

function Client(stream) {
  this.name = null;
  this.stream = stream;
}

var server = net.createServer(function (stream) {
  stream.setEncoding('utf-8');
  var address = stream.remoteAddress;
  var client = new Client(stream);
  if (address === '127.0.0.1') {
    client.name = 'system';
    clients.push(client);
  } else {
    stream.write('请在10s内输入您的昵称!\n');
  }

  var timeout = setTimeout(function () {
    if (client.name === null) {
      stream.write('对不起,您已经超时!\n');
      stream.end();
    }
  }, 10000);

  stream.on('data', function(data) {
    if (client.name === null) {
      var name = data.match(/\S+/);
      name = name[0];
      var flag = false;
      for (var key in clients) {
        if (clients[key].name === name) {
          flag = true;
          stream.write('对不起,该昵称已被使用,请换个试试!\n');
          break;
        }
      }
      if (flag) {
        return;
      }
      client.name = name;
      console.log(client.name, '进入聊天室');
      stream.write('欢迎您进入聊天室!\n');
      clients.forEach(function(c) {
        c.stream.write(client.name+' 进入聊天室!\n');
      });
      clients.push(client);
      return;
    }

    clients.forEach(function(c) {
      if (c !== client) {
        c.stream.write(client.name+" : "+data);
      }
    });
  });

  stream.on('end', function() {
    var position = -1;
    clients.forEach(function(c, index) {
      if (c === client) {
        position = index;
      }
      if (c !== client && client.name !== null) {
        c.stream.write(client.name+' 离开了!\n');
      }
    });
    stream.end();
    if (position >= 0) {
      clients.splice(position, 1);
    }
  });

  stream.on('error', function(err) {
    var position = -1;
    clients.forEach(function(c, index) {
      if (c === client) {
        position = index;
      }
      if (c !== client && client.name !== null) {
        c.stream.write(client.name+' 异常退出!\n');
      }
    });
    stream.end();
    if (position >= 0) {
      clients.splice(position, 1);
    }
  });
});

server.listen(8000);

© 著作权归作者所有

木头
粉丝 6
博文 34
码字总数 8666
作品 0
无锡
高级程序员
私信 提问
加载中
此博客有 9 条评论,请先登录后再查看。
HTML5 - 开发一个自己的websocket服务器

应用:node.js 主要步骤: 创建文件夹 创建app.js(server入口,app为自定义命名) npm init -y (快速创建一个package.json文件) 依赖包安装:nodejs-websocket (github安装讲解) npm i nod...

osc_y45xtjhw
2019/06/06
1
0
Express+Socket.IO 实现简易聊天室

代码地址如下:<br>http://www.demodashi.com/demo/12477.html 闲暇之余研究了一下 Socket.io,搭建了一个简易版的聊天室,如有不对之处还望指正,先上效果图: 首先是登录页面: 接下来就是聊...

osc_8xavvdt3
2018/03/06
2
0
nodejs入门——搭建一个聊天室应用

个人博客 http://mvc.coding.io/ 1入门教程推荐 node入门 很早之前看的就是这个,比较浅显易懂,看一遍就明白nodejs到底是怎么一回事儿了 2开源项目 昨天在coding上看到了一个nodejs聊天室,...

蛙牛
2014/08/06
4.4K
6
socket.io入门,简易聊天室

###介绍 通常我们web使用的是http协议,但是 HTTP 协议有一个缺陷:通信只能由客户端发起。 所以我们需要一个可以由服务端主动发出的协议,即WebSocket。 WebSocket是HTML5新增的一种通信协议...

osc_7jh09kyt
2019/02/26
14
0
每天干的啥?(2018.03)

【本年目标】 1:把Blake2980课程真正学会 2:制作微信小游戏教程 3:改微信小游戏(运营和简单定制) 【本月】 1:2980之Nodejs基础学好 【总结】 1:研究好zcml2018核心问题并拿到9000定金...

osc_1h9xhkow
2018/02/28
2
0

没有更多内容

加载失败,请刷新页面

加载更多

Http和Nginx反代至Tomcat(LNMT、LAMT)

Http和Nginx反代至Tomcat(LNMT、LAMT) ================================================================================ 概述: 本章将主要介绍Http和Nginx反代至Tomcat,具体内容如下......

osc_facwbzof
59分钟前
17
0
mysql备份之mysqldump工具

参考文档: 利用mysqldump+二进制日志实现备份恢复数据库:http://www.178linux.com/60616 mysql进阶篇(三种备份方法总结:lvm, mysqldump, xtrabackup):http://www.178linux.com/9781 注意...

osc_ur9mmbck
今天
25
0
实战nginx前端反代MogfileFS及负载均衡

实战nginx前端反代mogfilefs及负载均衡 =============================================================================== 实验描述: 使用Nginx代理请求至tackers,实现通过键就可以访问到...

osc_jvzgahav
今天
9
0
Xshell远程操作liunx图形化桌面(xmanager,远程桌面)

必要条件: 1、安装全套的xmanager程序 2、Linux系统安装了图像界面 ~]# yum grouplist    # 查看可安装的桌面组件~]# yum groupinstall "组件名" 3、在shell远程连接主机的属性里...

osc_a45vpoh4
今天
11
0
zabbix基础配置(二)

zabbix基础配置(二) ============================================================================= 概述: 本章我们将继续介绍zabbix的基础配置,具体内容如下: zabbix-agent的安装、...

osc_7bkuddw5
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部