赞
踩
网络上有很多关于使用node.js开发即时聊天室的案例,今天本文章将带你刨一刨node聊天室的祖坟,坐好了,every body,要发车了,滴,老司机卡 0-0
正如你所知道的,当我们想要使用技术实现一个即时的消息提醒机制,那么我们需要在client端和server端保持一个长轮询,且不管轮询的间隔是多久,这种方式对服务器端资源的耗费是很严重的,同时伴随着用户数量的增多,并发的几率也随之增高,极有可能造成宕机。
So 我们采用socket.io 模块来解决这个问题,socket.io 是一个在client端和server端架设的长链接,socket.io 不仅完美解决了即时性的问题,并且自身的无阻塞设计,并发问题也迎刃而解。
Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
接下来,我们将在文章中用图文的方式来详细描述整个实现的思路。
服务器共分为三种状态,第一种:与客户端保持正常连接状态;第二种:服务器处于关闭状态(向所有client端发送服务器关闭的信息);第三种:服务器重启状态(向所有client端发送服务器重启的信息,并且自动与服务器进行重连);
本文中node监听3000端口,采用express模块中的cookies来验证用户是否已经有登录的操作(验证cookies是否存在),如果用户已经登录直接进入聊天室,否则用户将自动跳转至登录页面,用户在登录页面键入自己的昵称以后,触发登录,此时分为两步,第一步:将用户的对应信息存入cookies,第二步:跳转至聊天室页面。
用户进行了登陆操作,并且成功登录至聊天室,此时,客户端向服务端发送上线信号,服务器收到用户上线的信号,接下来分为两种情况:
第一种:服务端判断用户是新用户,将新用户信息存储,向你广播你进入了聊天室,最后刷新在线用户列表,显示正在对谁说话。
第二种:服务端判断用户不是新用户,向所有在线用户广播该用户进入了聊天室,最后刷新在线用户列表,显示正在对谁说话。
客户端向服务端发出下线信号,服务端验证是否存在该用户,如果不存在则不做出响应,如果存在该用户,将用户从列表中删除,并且向其它所有在线用户发送该用户下线消息,刷新在线用户列表,此时判断是否有用户正在对该用户说话,如果有则切换为对所有人,并显示正在对所有人说话,如果没有则直接显示正在对谁说话。
首先,我们将用户键入的消息存入到,浏览器的DOM中(这样做的原因是我们采用的是 express 模块 form 表单 POST 提交的方式),我们假设发送消息的用户是A,既然要发送消息,就要确定接收消息的对象是谁,判断接收消息的对象是不是所有人,如果是所有人,则向所有在线用户广播该用户键入的消息;如果不是对所有人,那么就看A发送的对象是不是你,如果是你,则显示A对你说XXX,如果不是你,那么你什么都看不到。
https://github.com/zsion/nodechat.git
下载源码,放在本地服务或者服务器对应的站点文件夹下面,假如是D盘:
进入dos,进入文件目录,运行app.js,如下:
访问聊天室地址:http://localhost:3000,如下:
开始聊天,如下:
关于node开发聊天室的案例和资料有很多,本文旨在交流和学习,请不要用于恶意或商业行为,最后,希望本文对你的学习有帮助!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。