node.js实现即时聊天室,使用模块(express+socket.io),附源码

来源:互联网 发布:互联网大数据论文题目 编辑:程序博客网 时间:2024/06/04 20:13

序言

网络上有很多关于使用node.js开发即时聊天室的案例,今天本文章将带你刨一刨node聊天室的祖坟,坐好了,every body,要发车了,滴,老司机卡 0-0

正如你所知道的,当我们想要使用技术实现一个即时的消息提醒机制,那么我们需要在client端和server端保持一个长轮询,且不管轮询的间隔是多久,这种方式对服务器端资源的耗费是很严重的,同时伴随着用户数量的增多,并发的几率也随之增高,极有可能造成宕机。

So 我们采用socket.io 模块来解决这个问题,socket.io 是一个在client端和server端架设的长链接,socket.io 不仅完美解决了即时性的问题,并且自身的无阻塞设计,并发问题也迎刃而解。

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

接下来,我们将在文章中用图文的方式来详细描述整个实现的思路。


目录

      • 序言
      • 目录
      • 图文解说
        • 服务端
        • 客户端
        • 用户上线
        • 用户下线
        • 用户发消息
      • 源码地址
      • 启动server服务
      • 访问聊天室
      • 结语


图文解说

服务端

服务端

服务器共分为三种状态,第一种:与客户端保持正常连接状态;第二种:服务器处于关闭状态(向所有client端发送服务器关闭的信息);第三种:服务器重启状态(向所有client端发送服务器重启的信息,并且自动与服务器进行重连);

客户端

客户端

本文中node监听3000端口,采用express模块中的cookies来验证用户是否已经有登录的操作(验证cookies是否存在),如果用户已经登录直接进入聊天室,否则用户将自动跳转至登录页面,用户在登录页面键入自己的昵称以后,触发登录,此时分为两步,第一步:将用户的对应信息存入cookies,第二步:跳转至聊天室页面。

用户上线

用户上线

用户进行了登陆操作,并且成功登录至聊天室,此时,客户端向服务端发送上线信号,服务器收到用户上线的信号,接下来分为两种情况:
第一种:服务端判断用户是新用户,将新用户信息存储,向你广播你进入了聊天室,最后刷新在线用户列表,显示正在对谁说话。
第二种:服务端判断用户不是新用户,向所有在线用户广播该用户进入了聊天室,最后刷新在线用户列表,显示正在对谁说话。

用户下线

用户下线

客户端向服务端发出下线信号,服务端验证是否存在该用户,如果不存在则不做出响应,如果存在该用户,将用户从列表中删除,并且向其它所有在线用户发送该用户下线消息,刷新在线用户列表,此时判断是否有用户正在对该用户说话,如果有则切换为对所有人,并显示正在对所有人说话,如果没有则直接显示正在对谁说话。

用户发消息

用户发消息

首先,我们将用户键入的消息存入到,浏览器的DOM中(这样做的原因是我们采用的是 express 模块 form 表单 POST 提交的方式),我们假设发送消息的用户是A,既然要发送消息,就要确定接收消息的对象是谁,判断接收消息的对象是不是所有人,如果是所有人,则向所有在线用户广播该用户键入的消息;如果不是对所有人,那么就看A发送的对象是不是你,如果是你,则显示A对你说XXX,如果不是你,那么你什么都看不到。

源码地址

https://github.com/zsion/nodechat.git


启动server服务

下载源码,放在本地服务或者服务器对应的站点文件夹下面,假如是D盘:

示例

进入dos,进入文件目录,运行app.js,如下:

开启服务


访问聊天室

访问聊天室地址:http://localhost:3000,如下:

聊天室地址

开始聊天,如下:

聊天室界面


结语

关于node开发聊天室的案例和资料有很多,本文旨在交流和学习,请不要用于恶意或商业行为,最后,希望本文对你的学习有帮助!

阅读全文
0 0
原创粉丝点击