用NodeJS打造多人線上聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)

来源:http://www.cnblogs.com/bergwhite/archive/2017/05/31/6923555.html
-Advertisement-
Play Games

使用NodeJS & SocketIO & Express & EJS & MongoDB打造多人線上聊天室。 ...


項目背景

這個項目主要是為了玩玩NodeJS,項目的方向大概是做出類似QQ的線上聊天系統。想要線上體驗可以點擊線上演示

項目使用PM2進行部署和管理,功能在不斷的迭代開發中。如果你覺得這個項目比較有趣,或者能對你有所幫助,歡迎給個Star。

項目地址:https://github.com/bergwhite/nodejs-chat

PS: 最近找工作,北京的歡迎聯繫。另外之前做過一個基於Vue全家桶二次開發的V2EX社區 https://github.com/bergwhite/v2ex-vue

項目目錄


├─bin
│    www  // 啟動express
├─database
│    index.js  // MongoDB
├─public  // 靜態文件
│    css
│        index.css  // 首頁CSS
│    js
│        index.js  // 與socket服務進行通訊(關鍵文件)
|        socket-server.js  // socket服務(關鍵文件)
│    img
├─routers
│    index.js  // 頁面路由
├─view
│    error.ejs  // 錯誤頁
│    index.ejs  // 首頁
│    userCenter.ejs  // 用戶中心(規劃中)
│    userList.ejs  // 用戶列表(規劃中)
├─app.js  // express
├─package.json  // npm包

路由

目前只有/目錄和/room/:id正式使用了,其他路由的頁面還在迭代開發中。


/  // 首頁
/user  // 用戶列表
/user/:id  // 用戶中心
/user/:id/register  // 註冊(JSON)
/user/:id/login  // 登陸(JSON)
/user/:id/logout  // 註銷(JSON)
/user/:id/info  // 用戶資料(JSON)
/room/:id  // 指定聊天室

開始安裝

使用之前,請在package.json中修改MongoDB的安裝路徑(--dbpath)。


git clone https://github.com/bergwhite/nodejs-chat  // 克隆項目到本地
cd nodejs-chat  // 進入項目目錄
npm install  // 安裝依賴
npm run build  // 構建線上代碼
npm run mongod // 啟動MongoDB服務
npm run start // 啟動聊天室服務並啟動網站

項目演示

目前項目存在一個已知的bug,表情包無法在div模擬的輸入框中插入(修複中)。

匿名聊天

nodejs-chat-nick-chat

用戶聊天

nodejs-chat-user-chat

成員&房間

nodejs-chat-memb-room

離線通知

nodejs-chat-user-gone

更多房間

nodejs-chat-more-rooms

房間獨立

nodejs-chat-room-diff

已上線功能

  • 跨瀏覽器,跨地域聊天(SocketIO自帶技能)
  • 首次進入會顯示歡迎信息
  • 發送空消息會進行提示
  • 直接發送消息預設昵稱為“神秘人”
  • 發送消息後會清空當前輸入框內容,然後焦點回到消息輸入框
  • 添加用戶名後會成為新用戶,然後告知全房間人有新用戶加入
  • 可以創建不同的房間,不同的房間的聊天是相互獨立的
  • 顯示當前房間的線上用戶(設置了用戶名的)
  • 顯示目前所有打開的房間
  • 用戶(設置了用戶名的)離線會通知所有房間內的成員
  • 壓縮線上代碼,加快訪問速度
  • ...

待上線功能

用戶名

  • 統計匿名用戶
  • 支持一鍵隨機獲取用戶名

頭像

  • 訪客使用預設頭像
  • 新用戶(設置了用戶名的)隨機獲得一個頭像
  • 新用戶換頭像可以從預設的一組頭像中選擇
  • 是否支持上傳頭像還在考慮中(安全性問題)

聊天

  • 支持多組豐富的表情包
  • 是否支持上傳圖片還在考慮中(安全性問題)

資料庫

  • 對接MongoDB,新用戶(設置了用戶名的)設置密碼後,將從臨時用戶轉變為正式用戶

項目缺陷

  • 界面醜(等功能完善了再考慮)
  • 表情包無法在div模擬的輸入框中插入(修複中)
  • ...

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • layer是一款近年來備受青睞的web彈層組件,她具備全方位的解決方案,致力於服務各水平段的開發人員,您的頁面會輕鬆地擁有豐富友好的操作體驗。 插件官方地址:http://layer.layui.com/ layer 甚至相容了包括IE6在內的所有主流瀏覽器。 少說多做,代碼演示(拷貝直接運行): ...
  • 1 <!DOCTYPE html> 2 <html ng-app="a2_15"> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title>select控制項</title> 6 <script src="js/angular.js" type="te ...
  • 學習vue時寫的一個小demo 雖然實現很簡單,但還是推介看看,沒什麼難點,而且有些東西你可能會用到!線上演示demo源碼 ...
  • mongoose.connect('mongodb://username:[email protected]:27017/qianxunkefu_db')換成mongoose.connect('mongodb://username:[email protected]:27017/qianxunk ...
  • 《jQuery基礎教程(第4版)》是jQuery經典技術教程的*升級版,涵蓋jQuery 1.10.x和jQuery2.0.x。本書前6章以通俗易懂的方式講解了jQuery的核心組件,包括jQuery的選擇符、事件、動畫、DOM操作、Ajax支持等。第7章和第8章介紹了jQueryUI、jQuery ...
  • 這是Webpack+React系列配置過程記錄的第五篇。其他內容請參考: 第一篇:使用webpack、babel、react、antdesign配置單頁面應用開發環境 第二篇:使用react-router實現單頁面應用路由 第三篇:優化單頁面開發環境:webpack與react的運行時打包與熱更新 ...
  • 一、after()和before()方法的區別 after()——其方法是將方法裡面的參數添加到jquery對象後面去; 如:A.after(B)的意思是將B放到A後面去; before()——其方法是將方法裡面的參數添加到jquery對象前面去。 如:A.before(B)的意思是將A放到B前面去 ...
  • 轉載自:http://blog.csdn.net/lun379292733/article/details/8169807/ <script type="text/JavaScript"> /* * 手機號碼格式 * 只允許以13、15、18開頭的號碼 * 如:13012345678、1592922 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...