網頁上的即時聊天 nodejs學習筆記

2021-07-30 15:23:58 字數 1525 閱讀 5403

前段時間由於公司業務需要準備在**上做乙個即時聊天的功能,苦於本人從業經驗尚淺毫無頭緒。查了些資料問了下大神決定使用nodejs+sock.io來寫這個即時聊天功能。下面是本人做的一些探索。囿於本人技術有限,難免有錯誤,希望大神路過共同**指教。

第乙個方案是ajax輪詢,前端用setinterval()每5秒去查一次資料庫有沒有最新訊息。由於公司使用的mysql資料庫庫,頻繁讀寫一旦訪問量大了資料庫有點懸。

第二個方案就是php建立socket長連線,通過socket推送訊息給客戶端。這裡我找到了workeman,不過想接觸下nodejs就pass掉了。

第三個方案就是nodej+soket.io。其實和第二個方案原理是一樣的,也是通過socket建立長連線推送訊息,只不過乙個是用apache+php做服務端,乙個是nodejs做服務端。

最終我採用了第三個方案。

準備工作:

我選擇了編譯好的包直接wget到home目錄下(忘了說,公司使用的伺服器是阿里雲centos6.5)。

解壓#tar -vzf  node-v6.10.2-linux-x64.tar.xz

改名#mv node-v6.10.2-linux-x64.tar.xz nodejs

建立軟連線

#ln -s nodejs/bin/npm  /usr/local/bin/npm

#ln -s nodejs/bin/node  /usr/local/bin/node

檢查版本號

#node   -v

#npm   -v

#npm -g socket.io

#npm -g redis

#npm -g mysql

開始寫服務端,取名叫chat.js 放在home/codex目錄下,**如下:

var io = require('/home/nodejs/lib/node_modules/socket.io').listen(8086);

var fs = require('fs');//可要可不要,打算用來寫日誌的

var redis = require('/home/nodejs/lib/node_modules/redis');

var rds = redis.createclient(6379,'127.0.0.1');//連線redis

io.on('connection', function(socket));

//監聽使用者退出

socket.on('disconnect', function());

//監聽使用者發布聊天內容

socket.on('message', function(obj)

})io.emit('message',obj);

});});

寫得超級簡單,只用到了emit廣播,沒有單獨發資訊給某個使用者。就是只是監聽了message,每條訊息都存到redis佇列中,到了1000條就刪除最舊的一條訊息來保持列隊最多存1000條。在推送物件obj裡面可以帶註冊使用者的id,在前段js接收到服務端廣播後根據訊息帶的id分辨出是發給誰的。推送訊息的時候要注意,發給對方的同時要推送一條給自己。

用Jabber構建自己的即時聊天系統

jabber分為伺服器端和客戶端.任意的客戶端都能與任意的服務端進行連線.gtalk就是乙個jabber標準的服務.用任意的客戶端都可以用gmail帳戶登入gtalk伺服器.jabber的常用伺服器有 jabber的常用客戶端有 platform suggestions windows exodus...

基於NodeJS的秘室聊天室

本次聊天室我給它定義了乙個名稱叫 秘密聊天室 需求 技術選型 後端 nodejs,socket.io,中介軟體 express,body parser,multer,ejs mongoose express 是nodejs web應用框架,主要是要理解它的router body parser 用於獲...

windows 上 nodejs的全域性配置

安裝node.js 本地安裝 將安裝包放在 node modules 下 執行npm時所在的目錄 可以通過 require 來引入本地安裝的包 全域性安裝 可以直接在命令列裡使用 為什麼全域性安裝後還要本地安裝 僅全域性安裝足夠嗎?1.在js例項 中,預設下nodejs會在node path和目前j...