Nodejs聊天室及靜態資源伺服器的實現

2021-10-22 23:17:25 字數 3728 閱讀 6297

多人聊天伺服器

多人聊天客戶端

靜態資源伺服器

---分割線---

測試環境

➜  ~ node -v                               

v14.16.0

➜ ~ npm -v

7.6.3

需要mime包

mime可以識別檔案型別,方便網頁展示。

安裝

./lib/chat_server.js

var net =

require

('net');

var clientlist=

;//此處用字典記錄所有客戶端

var server = net.

createserver

(function

(socket));

// 監聽客戶端的訊息,並廣播給所有人

socket.on(

'data'

,function

(data)

)// 將退出聊天的客戶端從字典中刪除

socket.on(

'end'

,function()

);})

;// 廣播

function

broadcast

(data)

}// server.listen(port);

// 此處為方便server.js呼叫,若單獨使用可用⬆️代替⬇️

exports.

listen

=function(t

)});

./lib/chat_client.js

const net =

require

('net');

// 接收三個引數,依次為:主機名、埠號、使用者名稱。

var hostname = process.ar**[2]

;var port = process.ar**[3]

;var user = process.ar**[4]

;const client = net.

createconnection(,

(socket)

=>

else

if( chunk !==

null

)// 在「舊」流模式下,預設情況下標準輸入流已暫停,所以需要resume

process.stdin.

resume()

;});

});// 自定義hash函式,用於生成唯一id標識

function

hashuser

(str,idsize)

return hashcode%idsize;

}// 接收並在終端列印廣播(聊天訊息)

;// **快取,避免多次載入磁碟導致訪問緩慢

// 各種狀態碼總結

// 2開頭 成功

// 4開頭 請求的資源 (403無許可權)

// 5開頭 伺服器問題

// 3開頭 以前有,現在?️了

function

send404

(response));

response.

write

('error 404: resource not found');

response.

end();

}// 傳送檔案

function

sendfile

(response, filepath, filecontents));

response.

end(filecontents);}

// 靜態資源伺服器,若cache快取中是否已經存在則直接send

function

servestatic

(response, cache, abspath)

else

else})

}else})

}}// 建立伺服器

);// 監聽7301埠

server.

listen

(7301

,function()

)// 匯入前述的 聊天伺服器

var chatserver =

require

('./lib/chat_server');

chatserver.

listen

(7302

,"127.0.0.1"

);

核心邏輯可以簡化成以下**⬇️

簡化版server

const net =

require

('net');

var clientset =

newset()

;const server = net.

createserver

((socket)

=>

) socket.on(

'end'

,function()

);})

;function

broadcast

(data));

}server.

listen

(10000

,"127.0.0.1"

);

簡化版client

const net =

require

('net');

const config =

const client = net.

createconnection

(config,()

=>);

});client.on(

'data'

,(data)

=>);

client.on(

'end',(

)=>

);

node js 本地靜態資源伺服器

引入http模組 引入chalk模組 這是乙個作用在vs code上的顏色工具 const chalk require chalk 引入 配置的變數 const config require config defaultconfig 例項話化服務,req 是客戶端的請求,包含各種資訊 res是 返回...

多執行緒的聊天室的伺服器端

伺服器端的主要功能 實現多使用者群體聊天功能 此程式最多設定為10人,可進行更改 每個人所傳送的訊息其他使用者均可以收到。使用者可以隨意的加入或退出 推出以字串 bye 實現 伺服器也可以進行關閉。伺服器端的程式結構 總共有三個函式 主函式 main 實現伺服器端的初始化,接受連線 訊息處理函式 r...

大規模多人同時聊天室伺服器的SDK構架

構思了很久,現在基本的結構基本上確定下來了 採用udp,訊息佇列的模式 採用多個類的方式來實現,但是還不時完全的物件導向設計,其中最關的多型性,類的繼承都沒有用到,因為感覺技術還沒有到家,暫時利用幾個類進行簡單的包裝,打算下次的類 中完全實現物件導向的設計的優點 多型性,也就是使用虛函式來實現!這個...