国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于NodeJS的聊天系統(tǒng)的設(shè)計與實現(xiàn)

2017-07-12 07:16柳志強陜粉麗
電腦知識與技術(shù) 2017年13期
關(guān)鍵詞:聊天室

柳志強 陜粉麗

摘要:NodeJS把javascript推動為互聯(lián)網(wǎng)發(fā)展核心驅(qū)動力,給前端界帶來的更大的發(fā)展?jié)摿?。論文基于NodeJS的事件驅(qū)動及異步編程原理,就一個基于NodeJS的聊天室的實例結(jié)合HTML5的最新技術(shù)來展~javascript技術(shù)在后端服務器領(lǐng)域的前景。

關(guān)鍵詞:NodeJS;html5;聊天室;javascript;群聊

中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2017)13-0069-02

1概述

1.1課題背景

在互聯(lián)網(wǎng)飛速發(fā)展的時代,各種各樣的新技術(shù)不斷出現(xiàn)。當一門新技術(shù)普及的時候,又會面臨被其他的新技術(shù)替代,不斷的學習,不斷的研究,把新技術(shù)運用在我們的實際生活當中,才是技術(shù)更新?lián)Q代的本質(zhì)要求。作為一個前端愛好者,對HT—ML5的探索之路是不能停下的。跟很多前端界的朋友一樣,總夢想有一天可以用手里的技術(shù)操作后臺。NodeJS的出現(xiàn)正滿足了如此龐大群體的需要。對NodeJS相關(guān)技術(shù)的探究很有必要,很有意義的。

1.2系統(tǒng)開發(fā)的技術(shù)簡介

1.2.1HTML5相關(guān)技術(shù)

HTML5早已不僅僅是簡單的寫網(wǎng)頁的語言,而是前端界一系列新技術(shù)的總稱。系統(tǒng)使用最新的HTML5和CSS3以及ES6等相關(guān)技術(shù),并對他們的新特l生作了部分研究。

1.2.2NodeJS

NodeJS是一個可以快速構(gòu)建網(wǎng)絡服務及應用的平臺。該平臺是對GoogleV8引擎(應用于Google Chrome瀏覽器)進行了封裝。V8引擎執(zhí)行Javascript的速度非???,各方面性能非常好。Node對一些特殊用例進行了優(yōu)化,提供了很多替代的API,使得V8引擎在非瀏覽器環(huán)境下能更好地運行。

1.2.3 Mongodb

Mongodb數(shù)據(jù)庫屬于文檔模型的NoSQL數(shù)據(jù)庫,文檔是多個鍵值對的有序的組合,允許創(chuàng)建非結(jié)構(gòu)化、任意類型的鍵值對,鍵不用事先定義、也不會固定不變。

2需求分析

2.1可行性分析

本文中主要討論的是技術(shù)可行性。主要從項目實施的技術(shù)角度,合理設(shè)計技術(shù)方案,并進行比選和評價。NodeJS上的ExpressJS框架可以方便實現(xiàn)眾多功能:新建服務器,配置,設(shè)置路由,通過NPM命令“npm install”,運行NodeJs中的NPM包即可安裝。

2.2功能需求

客戶端的主要功能:用戶登錄注冊、群聊、表情發(fā)送、文件傳輸和上傳圖片到群相冊;

服務器端的主要功能:啟動和關(guān)閉后臺服務器建立連接監(jiān)聽客戶端請求。

3概要設(shè)計

3.1系統(tǒng)總體分析

該聊天系統(tǒng)的主要模塊有:

1)登錄模塊,包括功能:顯示當前用戶,保存用戶信息到session。

2)注冊模塊,包括功能:用戶圖像自動生成。

3)群聊模塊,包括功能:群聊、表情發(fā)送、圖片發(fā)送、字體顏色修改、聊天記錄查看功能。

4)群相冊模塊,包括功能:上傳用戶圖像、選擇相冊上傳圖片。

3.2功能模塊圖

聊天工具由服務器端和客戶端組成,要分析清楚兩方面所要完成的任務,對設(shè)計來說,等于完成了一半。根據(jù)聊天的通信步驟,系統(tǒng)的功能模塊如圖1所示。

4詳細設(shè)計

本系統(tǒng)可分為登錄、注冊、群聊和群相冊四個功能模塊?!暗卿洝蹦K為用戶提供登錄界面,并在用戶登錄顯示好友列表;“注冊”模塊為把用戶信息錄入Mongodb數(shù)據(jù)庫中,“聊天”模塊實現(xiàn)用戶的即時傳送信息,即多用戶即時聊天,可以發(fā)送文字或者表情圖片;“群相冊”模塊主要實現(xiàn)一用戶群相冊上傳圖片或上傳自己的頭像。聊天記錄會保存到數(shù)據(jù)庫中的chats集合內(nèi)。

4.1登錄注冊模塊詳細實現(xiàn)

當用戶首次進入給定的網(wǎng)址后,會直接跳轉(zhuǎn)到登錄頁面,用戶可直接登錄,若沒有賬號,可點擊注冊按鈕進入注冊頁面??紤]到用戶體驗,注冊界面只有用戶名、密碼和確認密碼三項即可完成注冊。當用戶進入注冊頁面,提交注冊后,首先實例化用戶表的模型,然后查找用戶名是否存在,如果不存在,會在數(shù)據(jù)庫中插入一條新的數(shù)據(jù),完成注冊。

4.2群聊模塊詳細實現(xiàn)

用戶完成登錄后,客戶端與服務器端建立連接。連接建立成功后,客戶向服務器請求讀取在線人員名單;服務器收到該請求,開始讀取數(shù)據(jù)庫中的user表并得到所有成員的用戶名,向客戶端發(fā)送這些信息;客戶收到服務器信息后,就把這些信息展示到頁面中。userIndex表示在線用戶的人數(shù),uselist表示顯示用戶的昵稱數(shù)組。聊天信息的發(fā)送與接收都是通過Sock-et.io模塊實現(xiàn)的。使用Socket.io對網(wǎng)絡上某一個服務器的某一個端口發(fā)出連接請求,一旦連接成功,打開會話;會話完成后,關(guān)閉Socket。也就是說,在服務端開啟socket服務,客戶端每一次連接成功時也都會同時創(chuàng)建一個線程來處理這次連接的請求,而該連接會被保存在一個集合中,直到服務結(jié)束,連接關(guān)閉,該線程也會結(jié)束,同時從連接的集合中移除該連接。

4.3群相冊模塊詳細實現(xiàn)

當用戶點擊聊天界面的群相冊,或點擊上傳圖標時,會進入群相冊界面,群相冊可以分類圖片,實現(xiàn)用戶的分類上傳,首先會觸發(fā)的事件為讀取uploads文件夾里的各個相冊,判斷是否為文件夾并完成遍歷。然后再把各個相冊的信息已數(shù)組的形式傳給客戶端的list頁面,用eis模板把服務器端傳過來的數(shù)據(jù)展示在頁面中。

當用戶點擊一個相冊進入時,又會觸發(fā)讀取相冊中圖片的函數(shù),首先把要獲取的相冊名以參數(shù)的形式傳到服務器,服務器端取到該相冊中的所有的文件名稱,當整個數(shù)據(jù)都獲得之后,才會觸發(fā)回調(diào)函數(shù),并讀取album頁面,把相冊里的圖片名稱傳到客戶端。

4.4其他功能

4.4.1聊天記錄保存查看實現(xiàn)

該功能并沒有很全面的實現(xiàn),只是給用戶提供保存最近一段時間的聊天記錄,當用戶點擊保存聊天記錄時,客戶端會把整個聊天界面的數(shù)據(jù)獲取到,并傳給服務器,然后在服務器端把用戶信息和聊天記錄保存到chats集合中。

4.4.2用戶圖像修改功能

當用戶對自己的頭像不滿意時,可選擇上傳喜歡的頭像到user相冊,用戶需要在本地磁盤中存放已經(jīng)命名好的,并且是以自己的用戶名命名的jpg格式的圖片。當上傳成功后,進入到聊天界面會發(fā)現(xiàn)自己的頭像已換成剛才上傳的圖片。

5總結(jié)

初識NodeJS,并且學習和采用,主要原因是因為NodeJS在解決當今網(wǎng)絡應用的問題時,提供了高性能、高可靠和低功耗的方法。NodeJS所遵循的Unix設(shè)計哲學,又提供了最簡單有效的復用規(guī)范,符合軟件開發(fā)的原則。簡單有效,才會被大家自覺采用,采用得越多,重用的可能性就更大。

npm和github一起,為今天的軟件生產(chǎn)提供了新的生產(chǎn)關(guān)系,這也是當前NodeJS超越其他社區(qū)的根本原因。不是單純的性能,也不僅僅是因為動態(tài)語言,甚至不是因為大量熟悉Javas-cfipt的前端程序員(和后端程序員相比,由于缺少系統(tǒng)性的思維,前端Javascript程序員掌握NodeJS未必有多少優(yōu)勢),而是以更加便捷的分享式開發(fā)為基礎(chǔ)的生產(chǎn)關(guān)系實實在在地提升了軟件生產(chǎn)力。在領(lǐng)域應用層面NodeJS在Web開發(fā)領(lǐng)域特別是其中的前端部分已經(jīng)達到了驚人的繁榮程度,甚至有不少重要系統(tǒng)的后端部分也基于NodeJS完成,對于NodeJS的前景一片光明。

猜你喜歡
聊天室
百萬級SUV聊天室(5人)
东至县| 红桥区| 博罗县| 靖远县| 米林县| 天峨县| 怀来县| 夏邑县| 阿坝| 闽清县| 石棉县| 屏边| 新沂市| 来安县| 福泉市| 莎车县| 吉木乃县| 吉林市| 岢岚县| 西乌珠穆沁旗| 泸溪县| 红安县| 溧水县| 新宾| 潢川县| 玉屏| 连云港市| 读书| 辉南县| 武冈市| 聂荣县| 平和县| 天祝| 德化县| 屯昌县| 祁连县| 尚义县| 海城市| 永和县| 和静县| 惠州市|