准备工作

  1. 安装NodeJs环境
  2. 安装编译器Sublime

如果网速不理想,可以百度一下如何加快npm的速度~

使用node搭建一个简单的网站后台

  1. 做完准备工作之后,新建文件夹chatroom,在chatroom中打开cmd,在控制台输出npm init。进行设置,得到package.json文件
{
"name": "chatroom",
"version": "1.0.0",
"description": "multiroom chat server",
"main": "app.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [
"chatroom"
],
"author": "yyg",
"license": "ISC",
}
  1. 安装socket.io以及mime。执行如下代码:
npm install socket.io --save-dev
npm install mime --save-dev

这里 mime 模块是用于获取所发送文件的类型。使用mime来获取文件类型来设置HTTP头的Content-Type。而 socket.io 则是这个聊天室的主角了,这是一个支持事实通讯而设计的轻量的双向通信协议。

这里推荐一篇文章

3. 在当前文件夹chatroom下新建app.js文件作为整个程序的入口文件,首先引入http,fs,path和mime包。添加如下代码:

var http = require('http');
var fs = require('fs');
var path = require('path');
var mime = require('mime');
var socketio = require('socket.io');
  1. 添加访问文件不存在时,返回404页面,在app.js中添加如下代码:
function send404 (res) {
res.writeHead(404, {'ContentType': 'text/plain'});
res.write('you are in a black hole');
res.end();
}

writeHead()第一个参数代表HTTP响应码,404是指没有发现文件。ContentType代表返回文件类型。

  1. 添加提供文件服务,用于给客户端返回相应文件。在app.js中添加如下代码:
function sendFile (res, filePath, fileContent) {
res.writeHead({
200,
'ContentType': mime.lookup(path.basename(filePath))
});
res.end(fileContents);
}

200代表返回成功。

  1. 提供静态文件服务。在app.js中添加如下代码:
var cache = {};
function serveStaticFile (res, cache, absPath) {
if(cache[absPath]) { //检测是否文件已经存在于内存,如果存在直接返回。
sendFile(res, absPath, cache[absPath]);
} else {
fs.exists(absPath, function(exists){ //检测absPath路径下有没有此文件
if(exists) {
fs.readFile(absPath, function(err, data){
if(err) {
send404(res);
} else {
cache[absPath] = data; //存进内存
sendFile(res, absPath, data);
}
});
} else {
send404(res);
}
});
}
}
  1. 使用http模块,新建服务器并设置路由。在app.js中添加如下代码:
var server = http.createClient(function(req, res) {
var filePath = false; if(req.url == '/') {
filePath = 'public/index.html';
} else {
filePath = 'public/' + req.url;
} var absPath = './' + filePath;
serveStaticFile(res, cache, absPath);
}); server.listen(3000, function(req, res) {
console.log('server started at port 3000');
});

敲完代码,大功告成!接下来再chatroom中新建文件夹public保存静态文件,建立一个主页index,内容随便填写。在命令行中输入node app,在浏览器中打开localhost:3000看看效果吧~

下次再写加入socket.io进行多人聊天

原生NodeJs制作一个简易聊天室的更多相关文章

  1. vue + socket.io实现一个简易聊天室

    vue + vuex + elementUi + socket.io实现一个简易的在线聊天室,提高自己在对vue系列在项目中应用的深度.因为学会一个库或者框架容易,但要结合项目使用一个库或框架就不是那 ...

  2. 真刀实战地搭建React+Webpack+Express搭建一个简易聊天室

    一.前面bb两句 因为自惭(自残)webpack配置还不够熟悉,想折腾着做一个小实例熟悉.想着七夕快到了,做一个聊天室自己和自己聊天吧哈哈.好了,可以停止bb了,说一下干货. 二. 这个项目能学到啥? ...

  3. Socket入门笔记 用TcpClient实现一个简易聊天室

    效果 实现思路 使用TcpListener建一个服务器,接收所有客户端发送的消息,然后由服务器再发送到其他客户端 客户端使用TcpClient,发消息给服务器,接收服务器的消息,不和其他客户端直接交互 ...

  4. node.js+websocket实现简易聊天室

    (文章是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) websocket提供了一种全双工客户端服务器的异步通信方法,这种通信方法使用ws或者wss协议,可 ...

  5. php_D3_“简易聊天室 ”实现的关键技术 详解

                      PHP+MySQL实现Internet上一个简易聊天室的关键技术  系统目标: 聊天室使用数据库汇集每个人的发言,并可将数据库内的发言信息显示在页面,让每个用户都可 ...

  6. node+websocket创建简易聊天室

    关于websocket的介绍太多,在这就不一一介绍了,本文主要实现通过websocket创建一个简易聊天室,就是90年代那种聊天室 服务端 1.安装ws模块,uuid模块,ws是websocket模块 ...

  7. 基于Node.js + WebSocket 的简易聊天室

    代码地址如下:http://www.demodashi.com/demo/13282.html Node.js聊天室运行说明 Node.js的本质就是运行在服务端的JavaScript.Node.js ...

  8. php+websocket搭建简易聊天室实践

    1.前言 公司游戏里面有个简单的聊天室,了解了之后才知道是node+websocket做的,想想php也来做个简单的聊天室.于是搜集各种资料看文档.找实例自己也写了个简单的聊天室. http连接分为短 ...

  9. 学习JavaSE TCP/IP协议与搭建简易聊天室

    一.TCP/IP协议 1.TCP/IP协议包括TCP.IP和UDP等 2.域名通过dns服务器转换为IP地址 3.局域网可以通过IP或者主机地址寻找到相应的主机 4.TCP是可靠的连接,效率低,且连接 ...

随机推荐

  1. day21 Pythonpython time模块和datetime模块详解

    一.time模块 time模块中时间表现的格式主要有三种: a.timestamp时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量 b.struct_time时间元组,共 ...

  2. node.js如何将远程的文件下载到本地、解压、读取

    其实要解决的问题,很简单,获取远程文件,然后解压到本地读取. 在vscode中通过node.js来实现是比较方便的,相比之前的zip.js,我觉得我还是比较喜欢node.js实现方式. test.js ...

  3. WordPress研究心得

    WordPress,当初之所以研究这个,目的是在于开发一个多租户系统应用.总的来说,WordPress给了我不少启发和影响.为此,我决定这个研究心得分享出去. 总的来说,这篇文章参考了很多朋友们的博客 ...

  4. ubuntu16.04下zabbix安装和配置

    介绍 Zabbix是用于网络和应用的开源监控软件. 它提供从服务器,虚拟机和任何其他类型的网络设备收集的数千个度量的实时监控. 这些指标可以帮助您确定IT基础架构的当前运行状况,并在客户投诉之前检测硬 ...

  5. Android学习之基础知识六—Android四种布局详解

    一.Android基本布局 布局是一种可以放置多个控件的容器,它可以按照一定规律调整内部控件的位置,而且布局内部除了可以放置控件外,还可以放置布局,实现多层布局嵌套.布局和控件.布局和布局之间的关系如 ...

  6. 截取字符串中最后一个中文词语(MS SQL)

    有朋友需求一个问题,就是处理一张表中某一字段,从这个字段中去截取内容中最后一个中文词语. ID SourceText Result 1 张达:U:1杨英苹:U:1,周忱:U:1,;苗桥:U:1,章玮: ...

  7. Quartz.Net分布式任务管理平台

           无关主题:一段时间没有更新文章了,与自己心里的坚持还是背驰,虽然这期间在公司做了统计分析,由于资源分配问题,自己或多或少的原因,确实拖得有点久了,自己这段时间也有点松懈,借口就不说那么多 ...

  8. Lustre文件系统部署和应用探索

    1. Lustre文件系统概述 2. Lustre文件系统部署 2.1 基本环境 本篇博客将在KVM虚拟机中部署Lustre文件系统. 操作系统版本为CentOS6.5_x86_64.Lustre软件 ...

  9. 忘记mysql数据库root密码

    找到配置文件my.ini  ,然后将其打开,可以选择用记事本打开,查找的方法如下: 打开后,搜索mysqld关键字 找到后,在mysqld下面添加skip-grant-tables,保存退出. PS: ...

  10. 【BUAA软件工程】第一次阅读作业

    BUAA软件工程 第一次阅读作业 项目 内容 这个作业属于哪个课程? 北航软工 这个作业的要求在哪里? 第一次个人作业 我在这个课程的目标是? 学习高效严谨的软件工程开发过程,建立团队意识 这个作业在 ...