玩转Node.js(四)-搭建简单的聊天室

玩转Node.js(四)-搭建简单的聊天室

  Nodejs好久没有跟进了,最近想用它搞一个聊天室,然后便偶遇了socket.io这个东东,说是可以用它来简单的实现实时双向的基于事件的通讯机制。我便看了一些个教程使用它来搭建一个超级简单的聊天室。

初始化项目

  在电脑里新建一个文件夹,叫做“chatroom”,然后使用npm进行初始化:

$ npm init

  然后根据提示以及相关信息一步一步输入,当然也可以一路回车下去,之后会在项目里生成一个package.json文件,里面的信息如下:

 1 $ cat package.json
 2 {
 3   "name": "chatroom",
 4   "version": "1.0.0",
 5   "description": "a room which lets people chat",
 6   "main": "index.js",
 7   "scripts": {
 8     "test": "nothing"
 9   },
10   "author": "voidy",
11   "license": "ISC",
12  }

  这个文件描述了项目的相关信息。

安装socket.io

  接下来,安装socket.io:

1 $ npm install socket.io --save

  安装Socket.IO的时候,--save参数用于保存模块依赖信息到package.json文件,安装完后,打开package.json文件会看到里面多了一项内容:

1 "dependencies": {
2     "socket.io": "^1.2.1"
3 }

  同时Socket.IO安装在了node_modules文件夹下。

实现聊天-服务器端

  首先我们来编写服务器端程序,新建文件“index.js”,在里面导入如下模块:

1 var http = require(‘http‘);
2 var socketio = require(‘socket.io‘);
3 var fs = require(‘fs‘); 

  第一行是导入http模块,先前我们已经见过了,用于创建http server。

  第二行是导入socket.io模块,实现实时聊天必备的,不再赘述。

  第三行是导入fs模块,用于读取文件。具体的一会你就会了解到。

  通过http模块创建app,在刚刚的代码中加入如下语句:

 1 var app = http.createServer(function(req, res) {
 2
 3     fs.readFile(__dirname + ‘/index.html‘, function (err, data) {
 4         if (err) {
 5             res.writeHead(500);
 6             return res.end(‘Error loading index.html‘);
 7         }
 8         res.writeHead(200);
 9         res.write(data);
10         res.end();
11     });
12 }).listen(8888); 

  fs.readFile()方法用于读取文件,在这里读取的是index.html文件,也就是一会即将要编写的前端聊天室的展示页面。

  第8行是返回请求的状态码,第9行是返回读取到的内容给浏览器。然后这个http server使用listen方法监听8888端口。

  接下来,就是使用socket.io来实现聊天的事件了。在刚刚的index.js文件的http server下面接着创建socket.io对象。

1 var io = socketio(app);

  然后监听connection事件,当浏览器连接到此Socket.IO服务时触发该事件:

1 io.on(‘connection‘, function (socket) {
2     // 监听浏览器端的chat事件
3     socket.on(‘chat‘, function (data) {
4         console.log(data);
5         io.emit(‘sendmsg‘, data);
6     });
7 });

  第4行用于将信息输入到后台的显示器,第5行用于将内容发送给客户端,为了知道服务器是否启动,我在后面又加了如下一句:

1 console.log("Server is running at http://localhost:8888")

  至此,服务器端编码完成。

实现聊天-客户端

  首先实现界面部分,仅仅有显示消息记录以及消息发送框,代码如下:

 1 <html>
 2     <head>
 3         <meta charset="utf-8">
 4         <title>Socket.IO chat</title>
 5         <style>
 6             * { margin: 0; padding: 0; box-sizing: border-box; }
 7             body { font: 13px Helvetica, Arial; }
 8             #form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
 9             #form input { border: 0; padding: 10px; width: 90%; margin-right: .5%; }
10             #form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
11             #messages { list-style-type: none; margin: 0; padding: 0; }
12             #messages li { padding: 5px 10px; }
13             #messages li:nth-child(odd) { background: #eee; }
14         </style>
15         <!-- 引入socket.io库和jQuery库 -->
16         <script src="https://cdn.socket.io/socket.io-1.2.1.js"></script>
17         <script src="http://code.jquery.com/jquery-1.11.1.js"></script>
18     </head>
19     <body>
20         <!-- 显示消息记录 -->
21         <ul id="messages"></ul>
22
23         <!-- 消息发送框 -->
24         <div id="form">
25             <input id="m" autocomplete="off" /><button id="send">Send</button>
26         </div>
27     </body>
28 </html>

  然后需要在里面加上JS来实现与服务器端的通信,将服务器端获取的数据展示到客户端,主要代码如下:

<script>
// 连接到Socket.IO服务器
var socket = io.connect();

$(function() {
 // 绑定发按钮发送消息的事件
    $(‘#send‘).on(‘click‘, function() {
        var data = $(‘#m‘).val();
      // 创建chat事件并发送消息给服务器
        // emit(‘event‘) 表示发送了一个event命令
        // 使用io.on(‘event‘)接收对应事件的信息
        // 所以客户端服务器端需要使用socket.on(‘chat‘)接收聊天信息
        socket.emit(‘chat‘, { msg: data });
        $(‘#m‘).val(‘‘);
    });
});

$(function() {
   // 接收消息并显示到消息记录框中
    socket.on(‘sendmsg‘, function(msg) {
        $(‘#messages‘).append($(‘<li>‘).text(msg.msg));
    });
});
</script>

  此时,可以执行:

$ node index.js

  然后在浏览器打开localhost:8888查看效果。

  至此,一个简陋的聊天室就实现了,有兴趣的朋友可以在此基础上进行扩展,实现功能更为复杂的聊天室。

  项目代码在github上:https://github.com/Voidly/chatroom

PS:本博客欢迎转发,但请注明博客地址及作者,因本人水平有限,若有不对之处,欢迎指出,谢谢~

  博客地址:http://www.cnblogs.com/voidy/

  博客新址:http://voidy.net

  <。)#)))≦

时间: 2024-08-25 08:09:46

玩转Node.js(四)-搭建简单的聊天室的相关文章

Node.js+websocket+mongodb实现即时聊天室

ChatRoom Node.js+websocket+mongodb实现即时聊天室 A,nodejs简介:Node.js是一个可以让javascript运行在服务器端的平台,它可以让javascript脱离浏览器的束缚运行在一般的服务器下面,你可以用Node.js轻松地进行服务器端应用的开发.Node.js是一个为实时Web应用开发而诞生的平台,它充分考虑了在实时响应和超大规模数据下架构的可扩展性,这使得它摒弃了传统的平台依靠多线程来实现高并发的的设计思路,而采用了单线程,异步式I/O和事件驱动

node.js学习笔记之简洁聊天室

近来刚开始学node.js,基础,深入,express,koa,react,keystone,mongress,等等各种各样的关于Node.js的东西,每个都学的迷迷糊糊的,原因在于没有练习,感觉学的每一个知识点就像一块拼图,最终却没有拼到一起,于是就想多写几个小项目练练手,于是,就有了本文... ----------------------------------我是分割线----------------------------------------------- 恩,就按我写代码的顺序来记

Node.js环境搭建&amp;&amp;npm安装

Node.js环境搭建 第一步:进入官网,然后直接点击左边的下载左边的部分,因为其提示 “Recommended For Most Users”. 第二步:下载得到的是msi文件,直接双击安装,一路next即可安装完成. 第三步:这时,我们就可以在“开始”中找到最新添加了两项内容,可以创建快捷方式到桌面上方便使用.如图: 第四步:安装完成后,按下win+R ,然后输入cmd后进入dos窗口,直接输入 node -v,这时我们可以看到你所安装的版本号,表示安装成功,如下所示: 第五步:npm安装.

玩转Node.js(二)

玩转Node.js(二) 先来回顾上次的内容,上一次我们使用介绍了Node.js并写了第一个服务器端的Hello World程序,在这个Hello World程序中,请求自带的http模块并将其赋给http变量,然后调用http模块的createServer函数,这个函数会返回一个对象,这个对象有一个叫做listen的方法,而这个方法有一个数值参数,指定这个HTTP服务器监听的端口号,我们当时定义的是8888端口号.那么为什么看起来有些复杂呢?那是因为我们向createServer函数传递了一个

玩转Node.js(一)

玩转Node.js(一) 在说Node.js之前,我们先来说说js,如果你也曾开发过前端,那么你一定接触到了这个叫JavaScript有趣的东西,而对于JavaScript,你只会基本的操作——为web页面添加交互.但是这远远不够,远远不是你想象中的站点,没有复杂酷炫的功能所以你不得不学起Java.PHP.Ruby.Python来为站点写后端程序.这期间,js扩展了,有了Jquery以及Prototype等框架来使你能更简便的编写js,不过这还仅仅是前端啊~就在此时,Node.js凌空出世,犹如

node.js 环境搭建

一 官网下载安装包 : 1.http://www.nodejs.org/download/ 选择相应的包进行安装 2.安装express : npm install -g express -generator 二 测试安装情况 在cmd 中输入 node -version 如果显示版本说明安装成功 在cmd中输入 npm --version 如果显示版本说则说明 包管理器安装成功 三 安装模块 在CMD 中 依次输入 mkdir my-project cd my-project npm inst

在Node.js上搭建React.js开发环境

1.React.js的介绍: React 是一个用于构建用户界面的 JAVASCRIPT 库. React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图). React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源. React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它. 特点: 1.声明式设计 ?React采用声明范式,可以轻松描述应用. 2.高效 ?React通过对DOM的模拟,最大限

玩转Node.js(三)

玩转Node.js(三) 上一节对于Nodejs的HTTP服务进行了较为详细的解析,而且也学会了将代码进行模块化,模块化以后每个功能都在单独的文件中,有利于代码的维护.接下来,我们要想想如何处理不同的HTTP请求,而这个处理不同的HTTP请求的东东,就是传说中的路由选择. 路由之说 首先,我们需要清楚的知道,我们要为路由提供请求的URL和其他需要的GET及POST参数,随后路由需要根据这些数据来执行相应的代码. 因此,我们需要查看HTTP请求,从中提取出请求的URL以及GET/POST参数.这一

[读书笔记]了不起的node.js(四)

这周的学习主要是nodejs的数据库交互上,并使用jade模板一起做了一个用户验证的网站.主要是遇到了一下几个问题. 1.mongodb版本过低 npm ERR! Not compatible with your operating system or architecture: [email protected] 0.9.9只支持linux,darwin,freebsd这几个系统,最新版本已支持wins. 2.nodejs进行insert操作后:无法读取结果 1 app.post('/sign