Node.js 學(xué)習(xí)(六)——websocket 組件實(shí)現(xiàn)在線聊天室 demo
Node.js學(xué)習(xí)(六)——websocket組件實(shí)現(xiàn)在線聊天室demo
要實(shí)現(xiàn)的功能
- 在線人員列表展示,上下線刷新在線人員列表
- 即時(shí)聊天
demo圖片
用express新建項(xiàng)目
express -e websocketdemo
下載依賴
在websocketdemo目錄下執(zhí)行命令,在項(xiàng)目下生成node_modules目錄
npm install
添加websocket模塊
npm install nodejs-websocket
實(shí)現(xiàn)代碼
項(xiàng)目目錄
在view下添加一個(gè)chartroom.ejs頁面
聊天室
當(dāng)前登錄人:
index.js修改
- 添加跳轉(zhuǎn)到頁面的路由
- 添加websocket服務(wù)器
- 服務(wù)器中3種類型的邏輯處理
- code=0,代表初始化客戶端請求。1.將當(dāng)前連接放入在線人集合中。2.向所有在線人發(fā)出更新在線人的消息。
- code=1,代表發(fā)送消息。將所有在線人的消息界面追加上當(dāng)前發(fā)送的消息。
- code=2,代表人員列表更新。上線是新增一個(gè)在線人員,下線或刷新瀏覽器是減少一個(gè)在線人員。
var express = require('express');
var router = express.Router();
var ws = require("nodejs-websocket");
//存所有人的連接
var onLineUser = new Array();
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
//聊天室頁面
router.get('/chartroom', function(req, res, next) {
res.render('chartroom');
});
//聊天服務(wù)器8002
var server = ws.createServer(function (conn) {
conn.on("text", function (str) {
var obj = JSON.parse(str);
switch(obj.code){
case 0:initClient(conn);break;
case 1:returnMsg(conn,obj);break;
case 2:userListHandle(conn,obj);break;
}
})
conn.on("close", function (code, reason) {
console.log("關(guān)閉連接")
});
conn.on("error", function (code, reason) {
console.log("異常關(guān)閉")
});
}).listen(8002)
//發(fā)送消息,返回消息
function returnMsg(conn,obj){
if(userList.length != 0){
var returnText = obj.name+" "+obj.date+":\n"+" "+obj.sendContent+"\n";
var returnObj = new Object();
returnObj.code = 1;
returnObj.returnText=returnText;
for(var i=0;i -1) {
this.splice(index, 1);
}
};
module.exports = router;
評論
圖片
表情
