nodejs 伺服器實現區分多客戶端請求服務

2022-06-08 23:54:17 字數 1378 閱讀 7015

初始實現

var net = require('net');//

1 引入net模組

var chatserver = net.createserver();//

建立net伺服器

var clientlist=;//

儲存多個客戶端的陣列

chatserver.on('connection', function (client)

} });

});

chatserver.listen(9000, "127.0.0.1");//

伺服器端口

注意:這裡有個坑——如果有個客戶端斷開連線,那麼所有人都會玩完!

因為如果再往伺服器傳送訊息,這時候伺服器並不知道某個客戶端已經斷開了連線,因此會繼續向其傳送資料,但是這時斷開的這個客戶端對應的socket已經無法寫入資料,而對已關閉的socket進行write()操作node程式會丟擲異常,進而導致全軍覆沒。所以,這個問題應該從兩個方面來解決:

(1)當客戶端斷開連線時,通知伺服器,將其從客戶端列表中移除,防止其呼叫write方法(v8引擎也會把響應的socket物件作為垃圾**,並釋放相應的記憶體);

(2)採用更保險的方式呼叫write()方法。

改進如下:

最後,監聽客戶端關閉事件,並記錄錯誤

var net = require('net');//

1 引入net模組

var chatserver = net.createserver();//

建立net伺服器

var clientlist = ;//

儲存多個客戶端的陣列

chatserver.on('connection', function (client)

client.on('data', function

(data) );

//監聽客戶端終止

client.on('end',function

());

/*記錄錯誤

*/client.on('error',function

(e));

function

broadcast(message,client)

else

} }

/*刪除掉伺服器的客戶端陣列中,已斷開的客戶端

*/for(var i=0;i)

} });

//伺服器端口

nodeJS實現簡單靜態伺服器

引入依賴模組let config require config let chalk require chalk 粉筆模組 命令列變色 let http require http http模組 let fs require fs 檔案模組 let zlib require zlib let handl...

使用Nodejs實現聊天伺服器

使用者上線後,根據使用者的userid和socket,儲存到乙個全域性的map中 傳送訊息時,根據對方的userid找到對應的socket,通過socket.emit傳送訊息給對方 使用者下線後,從全域性的map中刪除對應的使用者socket 由於需要保持長連線,客戶端需要定時發心跳給服務端,所以定...

fifo實現單伺服器多客戶端

費勁的折騰,好幾次小細節沒處理好,真是醉了,不說了 記錄下 服務端 fifo first in,first out 有名管道 include include include include include include include include include include include...