使用Nodejs實現聊天伺服器

2022-04-17 07:21:10 字數 857 閱讀 5901

使用者上線後,根據使用者的userid和socket,儲存到乙個全域性的map中

傳送訊息時,根據對方的userid找到對應的socket,通過socket.emit傳送訊息給對方

使用者下線後,從全域性的map中刪除對應的使用者socket

由於需要保持長連線,客戶端需要定時發心跳給服務端,所以定義了乙個心跳訊息,可以5分鐘發一次

實現了聊天伺服器後,對推送來說就很簡單了

在redis裡開個channel,業務伺服器往這個channel裡publish資料

nodejs subscribe這個channel監聽資料,找到對應使用者傳送訊息即可。

var notification = redis.createclient()

notification.subscribe("notification")

// check redis notifcation channel

notification.on("message", function (pattern, msg)

}else

list.push(msg)

var msglist = json.stringify(list)

store.hset("nodejs_notification", key, msglist, function (e, r) )

})if (sockets[key]) }}

})function send_notification(socket, notif) )

}

服務端是使用socket.io實現,基本上socket.io的lib都能相容

其他語言版本,可以在github搜尋socket.io,找到對應的lib庫

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

多人聊天伺服器 多人聊天客戶端 靜態資源伺服器 分割線 測試環境 node v v14.16.0 npm v 7.6.3需要mime包 mime可以識別檔案型別,方便網頁展示。安裝 lib chat server.js var net require net var clientlist 此處用字典...

nodeJS實現簡單靜態伺服器

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

go語言實現聊天伺服器 多人聊天)

用go語言實現乙個server作中轉 訊息,多個客戶端聊天 1 伺服器開啟,等待來自客戶端的連線,把每乙個客戶端儲存在map中 2 客戶端連線伺服器,給自己取乙個別名,儲存在伺服器 4 客戶端發訊息,伺服器解析協議,給每乙個客戶端 5 客戶端下線 server server project main...