基于NodeJS的聊天系统的设计与实现

2017-07-12 07:16柳志强陕粉丽
电脑知识与技术 2017年13期
关键词:聊天室

柳志强 陕粉丽

摘要:NodeJS把javascript推动为互联网发展核心驱动力,给前端界带来的更大的发展潜力。论文基于NodeJS的事件驱动及异步编程原理,就一个基于NodeJS的聊天室的实例结合HTML5的最新技术来展~javascript技术在后端服务器领域的前景。

关键词:NodeJS;html5;聊天室;javascript;群聊

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2017)13-0069-02

1概述

1.1课题背景

在互联网飞速发展的时代,各种各样的新技术不断出现。当一门新技术普及的时候,又会面临被其他的新技术替代,不断的学习,不断的研究,把新技术运用在我们的实际生活当中,才是技术更新换代的本质要求。作为一个前端爱好者,对HT—ML5的探索之路是不能停下的。跟很多前端界的朋友一样,总梦想有一天可以用手里的技术操作后台。NodeJS的出现正满足了如此庞大群体的需要。对NodeJS相关技术的探究很有必要,很有意义的。

1.2系统开发的技术简介

1.2.1HTML5相关技术

HTML5早已不仅仅是简单的写网页的语言,而是前端界一系列新技术的总称。系统使用最新的HTML5和CSS3以及ES6等相关技术,并对他们的新特l生作了部分研究。

1.2.2NodeJS

NodeJS是一个可以快速构建网络服务及应用的平台。该平台是对GoogleV8引擎(应用于Google Chrome浏览器)进行了封装。V8引擎执行Javascript的速度非常快,各方面性能非常好。Node对一些特殊用例进行了优化,提供了很多替代的API,使得V8引擎在非浏览器环境下能更好地运行。

1.2.3 Mongodb

Mongodb数据库属于文档模型的NoSQL数据库,文档是多个键值对的有序的组合,允许创建非结构化、任意类型的键值对,键不用事先定义、也不会固定不变。

2需求分析

2.1可行性分析

本文中主要讨论的是技术可行性。主要从项目实施的技术角度,合理设计技术方案,并进行比选和评价。NodeJS上的ExpressJS框架可以方便实现众多功能:新建服务器,配置,设置路由,通过NPM命令“npm install”,运行NodeJs中的NPM包即可安装。

2.2功能需求

客户端的主要功能:用户登录注册、群聊、表情发送、文件传输和上传图片到群相册;

服务器端的主要功能:启动和关闭后台服务器建立连接监听客户端请求。

3概要设计

3.1系统总体分析

该聊天系统的主要模块有:

1)登录模块,包括功能:显示当前用户,保存用户信息到session。

2)注册模块,包括功能:用户图像自动生成。

3)群聊模块,包括功能:群聊、表情发送、图片发送、字体颜色修改、聊天记录查看功能。

4)群相册模块,包括功能:上传用户图像、选择相册上传图片。

3.2功能模块图

聊天工具由服务器端和客户端组成,要分析清楚两方面所要完成的任务,对设计来说,等于完成了一半。根据聊天的通信步骤,系统的功能模块如图1所示。

4详细设计

本系统可分为登录、注册、群聊和群相册四个功能模块。“登录”模块为用户提供登录界面,并在用户登录显示好友列表;“注册”模块为把用户信息录入Mongodb数据库中,“聊天”模块实现用户的即时传送信息,即多用户即时聊天,可以发送文字或者表情图片;“群相册”模块主要实现一用户群相册上传图片或上传自己的头像。聊天记录会保存到数据库中的chats集合内。

4.1登录注册模块详细实现

当用户首次进入给定的网址后,会直接跳转到登录页面,用户可直接登录,若没有账号,可点击注册按钮进入注册页面。考虑到用户体验,注册界面只有用户名、密码和确认密码三项即可完成注册。当用户进入注册页面,提交注册后,首先实例化用户表的模型,然后查找用户名是否存在,如果不存在,会在数据库中插入一条新的数据,完成注册。

4.2群聊模块详细实现

用户完成登录后,客户端与服务器端建立连接。连接建立成功后,客户向服务器请求读取在线人员名单;服务器收到该请求,开始读取数据库中的user表并得到所有成员的用户名,向客户端发送这些信息;客户收到服务器信息后,就把这些信息展示到页面中。userIndex表示在线用户的人数,uselist表示显示用户的昵称数组。聊天信息的发送与接收都是通过Sock-et.io模块实现的。使用Socket.io对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。也就是说,在服务端开启socket服务,客户端每一次连接成功时也都会同时创建一个线程来处理这次连接的请求,而该连接会被保存在一个集合中,直到服务结束,连接关闭,该线程也会结束,同时从连接的集合中移除该连接。

4.3群相册模块详细实现

当用户点击聊天界面的群相册,或点击上传图标时,会进入群相册界面,群相册可以分类图片,实现用户的分类上传,首先会触发的事件为读取uploads文件夹里的各个相册,判断是否为文件夹并完成遍历。然后再把各个相册的信息已数组的形式传给客户端的list页面,用eis模板把服务器端传过来的数据展示在页面中。

当用户点击一个相册进入时,又会触发读取相册中图片的函数,首先把要获取的相册名以参数的形式传到服务器,服务器端取到该相册中的所有的文件名称,当整个数据都获得之后,才会触发回调函数,并读取album页面,把相册里的图片名称传到客户端。

4.4其他功能

4.4.1聊天记录保存查看实现

该功能并没有很全面的实现,只是给用户提供保存最近一段时间的聊天记录,当用户点击保存聊天记录时,客户端会把整个聊天界面的数据获取到,并传给服务器,然后在服务器端把用户信息和聊天记录保存到chats集合中。

4.4.2用户图像修改功能

当用户对自己的头像不满意时,可选择上传喜欢的头像到user相册,用户需要在本地磁盘中存放已经命名好的,并且是以自己的用户名命名的jpg格式的图片。当上传成功后,进入到聊天界面会发现自己的头像已换成刚才上传的图片。

5总结

初识NodeJS,并且学习和采用,主要原因是因为NodeJS在解决当今网络应用的问题时,提供了高性能、高可靠和低功耗的方法。NodeJS所遵循的Unix设计哲学,又提供了最簡单有效的复用规范,符合软件开发的原则。简单有效,才会被大家自觉采用,采用得越多,重用的可能性就更大。

npm和github一起,为今天的软件生产提供了新的生产关系,这也是当前NodeJS超越其他社区的根本原因。不是单纯的性能,也不仅仅是因为动态语言,甚至不是因为大量熟悉Javas-cfipt的前端程序员(和后端程序员相比,由于缺少系统性的思维,前端Javascript程序员掌握NodeJS未必有多少优势),而是以更加便捷的分享式开发为基础的生产关系实实在在地提升了软件生产力。在领域应用层面NodeJS在Web开发领域特别是其中的前端部分已经达到了惊人的繁荣程度,甚至有不少重要系统的后端部分也基于NodeJS完成,对于NodeJS的前景一片光明。

猜你喜欢
聊天室
百万级SUV聊天室(5人)