【z13区】nodejs原生态模块,写个聊天室

目的:用控制台实现个聊天室

使用模块:net,process

开始前的废话:对于初学者来说,先理解官方文档很重要。

有很多写聊天室的,大多引用的第三方模块,难免会增加新手学习负担,这里我只使用官方中的net和process模块。

希望能给新手,更好的理解这两个模块(net模块为主,process模块为辅)



正文:

项目主要就两个文件

server.js:服务器

client.js:客户端(可以多开)

/*server.js*/var net=require(‘net‘);
var server=net.createServer(),
    clientList=[];//clientList 保存连接的所有客户端
var options={"host":"127.0.0.1","port":"1117"};
/*给数组添加一个方法,判断obj是否存在此数组中*/
Array.prototype.contains=function (obj) {
    for (var i = 0; i < this.length; i++) {
        if(this[i]===obj){
            return true;
        }
    }
    return false;
}

server.on(‘connection‘,function (client) {
    client.name=client.remoteAddress+‘:‘+client.remotePort;
    console.log(client.name+‘ 已经连接‘);
    if(!clientList.contains(client)){
        clientList.push(client);
    }
    client.on(‘data‘,function (data) {
        console.log(client.name+‘ ‘+data);
        //将此客户端的信息,发送给 除此客户端 的所有客户端
        for (var i = 0; i < clientList.length; i++) {
            if(client!==clientList[i]){
                clientList[i].write(clientList[i].name+‘ ‘+data);
            }
        }
    });

    client.on(‘error‘,function () {
        console.log(this.name+‘ 发生异常‘);
    });
    client.on(‘end‘,function(){
        console.log(this.name+‘ 断开连接‘);        //这里需要将此 client 从lientList中移除
    });

});
/*client.js*/var net=require(‘net‘);
var options={"host":"127.0.0.1","port":1117};

var client=net.connect(options,function(){
    console.log("客户端已连接");
    consoleRead(client);
});

client.on(‘data‘,function (data) {
    console.log(data.toString());
});
/*因为nodejs控制台运行后,默认是不支持输入的。需要使用 process.stdin.resume().让其可以接收输入信息process.stdin.on(‘data‘,Function)获取输入的内容如果不需要再输入时,需要用process.stdin.pause()来停止接受输入信息。参数 client:当前客户端*/
function consoleRead(client){
  process.stdin.resume();
  console.log("输入聊天内容:");
  process.stdin.setEncoding(‘utf8‘);
  process.stdin.on(‘data‘, function(chunk) {
     //process.stdin.pause();
     if(chunk.trim()==="end"){
         console.log(‘已断开和服务器的连接‘);
         client.end();
     }else{
         client.write(chunk);
     }
  });
}

下面来看看效果图:

时间: 2024-07-28 14:16:21

【z13区】nodejs原生态模块,写个聊天室的相关文章

使用nodejs+express+socketio+mysql搭建聊天室

使用nodejs+express+socketio+mysql搭建聊天室 nodejs相关的资料已经很多了,我也是学习中吧,于是把socket的教程看了下,学着做了个聊天室,然后加入简单的操作mysql数据库存聊天记录.express主要是做了路由及jade模板.我是用的国外的免费空间托管的,国内各种备案,它的访问地址是:nodejs聊天室http://chat.lovewebgames.com/,效果图如下: 用到的插件如下: "socket.io":"~1.3.5&quo

nodejs 基于socket.io实现聊天室

由于之后要做的网页视频直播项目要用到socket.io模块,所以特地花时间研究了下,参照网上的代码做了些改进,自己写了个聊天室代码.不得不承认后端事实推送能力有点厉害,这是以前我用php一直苦恼的事情.下面简单介绍下我的项目,顺带讲解下nodejs. 事实上,在看别人写的代码之前,我一直不知道nodejs是干嘛的,直到真正接触到才明白这也可以算作是服务端代码,丰富的第三方库使其功能极其强大.它可以像golang的beego一样直接通过命令行开启服务器,不过要用到express模块.加载模块的方式

nodejs构建多房间简易聊天室

1.前端界面代码 前端不是重点,够用就行,下面是前端界面,具体代码可到github下载. 2.服务器端搭建 本服务器需要提供两个功能:http服务和websocket服务,由于node的事件驱动机制,可将两种服务搭建在同一个端口下. 1.包描述文件:package.json,这里用到了两个依赖项,mime:确定静态文件mime类型,socket.io:搭建websocket服务,然后使用npm install  安装依赖 { "name": "chat_room",

【Z13区】《Log4net写出适合自己的日志类》第三篇【终】【怎样让它适合你自己需求】

第一篇   用特别简单的实例打开log4net的体验之门. 第二篇   用理论,让我们了解那些配置文件的意义所在,让我们回过头看懂了第一篇写的配置文件,和输出内容的格式. 本篇中,[由于大量代码和文字叙述,很容易忽略一些重要信息,所以本篇基本以源代码为中心,简单在博客中讲解重点步骤] 我将直接公布一份源码[包括大部分的常用apperder配置],如果大家看了前两篇. 基本也能看懂源码内容了[源码中会有大量备注]. GITHUB地址:https://github.com/tanshanli/Z13

【Z13区】《Log4net写出适合自己的日志类》第一篇

我想先知道为什么要用log4net写日志类 1.上来就是干,先实践后理论 a.创建控制台应用

【Z13区】《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】

在第一篇中,已经真刀实枪用log4net干过了一次.也是希望大家能先感受到什么是log4net.但是只没有理论的实践肯定是盲目的,所以这一篇, 咱们好好谈谈log4net的配置等其他信息 log4net来源 log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务. 详细说明,源码下载 可以参考官网:http://logging.apache.org/log4net/ Apache Log

用NET语言写个“聊天室”

当我们使用“项目”选项卡添加引用的时候,我们添加的其实是路径,在调用的时候,通过路径去找到这个程序集使用,当我们使用“浏览”选项卡是,就是把浏览到的这个程序集复制到当前程序集下: 多线程: 2.1    产生一个线程的4步骤: 2.1.1          编写产生线程所要执行的方法 2.1.2          引用System.Threading命名空间 2.1.3          实例化Thread类,并传入要执行的方法委托,(这时候这个线程还没有开始执行) 2.1.4         

Golang之写一个聊天室

1. 海量用户在线聊天系统 2. 点对点聊天 3. 用户登录&注册 一.服务端开发 1. 用户管理 用户id:数字 用户密码:字母数字组合 用户昵称:用来显示 用户性别:字符串 用户头像:url 用户上线登录时间:字符串 用户是否在线:online 数据存储:redis hash:users 2. 用户动作 1. 发送信息 2. 接收信息 3. 用户注册&登录 4. 用户消息离线存储 二.客户端开发 1. 用户注册 2. 用户登录 3. 发送信息 4. 获取用户列表 三.通信协议 [0:4

零基础实现node+express个性化聊天室

本篇文章使用node+express+jquery写一个个性化聊天室,一起来get一下~(源码地址见文章末尾) 效果图 项目结构 实现功能 登录检测 系统自动提示用户状态(进入/离开) 显示在线用户 支持发送和接收消息 自定义字体颜色 支持发送表情 支持发送图片 下面将一一讲解如何实现 前期准备 node及npm环境.express.socket.io 具体实现 1.将聊天室部署到服务器 先用node搭建一个服务器,部署在localhost:3000端口,先尝试向浏览器发送一个"hello wo