簡體   English   中英

Node.js中基於朋友的系統

[英]Friend Based System in Node.js

所以我目前有一個實時聊天應用程序,並使用node和socket.io運行。 我要從這里開始的工作是,讓用戶創建一個帳戶並根據其用戶名搜索其他用戶。 然后,他們可以通過請求將其添加為朋友,以開始聊天。

我環顧四周,嘗試回答這個問題,但是找不到任何可靠的起點。 我是node.jsexpresssocket.io ,並且希望在此問題上有所幫助。

如果您能為我指出如何使用節點創建基於朋友的系統的正確方向,那就太好了。 謝謝!

我也認為這是一個廣泛的問題,但是我將盡力讓您了解您正在嘗試做的技術方面。

首先,您應該有一個用戶管理系統,包括登錄,注冊,忘記密碼等。您可以為此使用passport.js 現在,您已經擁有完整的用戶管理系統,可以進一步開始。

如果您願意最終控制聊天系統的好友請求/接受功能,則可能要創建如下的數據庫結構。

 const mongoose = require('mongoose'), Schema = mongoose.Schema; // Schema defines how chat messages will be stored in MongoDB const FriendsSchema = new Schema({ participants: [{ type: Schema.Types.ObjectId, ref: 'user' }], requestTo: {type: Schema.Types.ObjectId, ref: 'user'}, accepted: {tyoe: Boolen, default:false} }); module.exports = mongoose.model('Friends', FriendsSchema); 

您可以檢查該數據庫以創建友誼請求,檢查兩個用戶之間的友誼等。您在數據庫中應該做的另一件事是創建聊天模型。 要保存消息,如下所示:

 const mongoose = require('mongoose'), Schema = mongoose.Schema; const MessageSchema = new Schema({ friendshipId: { type: Schema.Types.ObjectId, required: true, ref: 'Friends' }, body: { type: String, required: true }, author: { type: Schema.Types.ObjectId, ref: 'user' }, seen: { type: Boolean, default: false }, delivered: { type: Boolean, default: false } }, { timestamps: true // Saves createdAt and updatedAt as dates. createdAt will be our timestamp. }); module.exports = mongoose.model('Message', MessageSchema); 

現在,對於實時聊天系統,您應該集成socket.io和數據庫。 您可以像下面的代碼那樣進行操作。

 var http = require('http') var redis = require('redis') var client = redis.createClient() module.exports = (app) => { const server = http.createServer(app) const io = require('socket.io').listen(server) io.sockets.on('connection', (socket) => { socket.on('sendChat', (user, msg, messageId) => { client.get(user, function(err, socketId){ io.to(socketId).emit('updateChat', socket.username, msg, messageId) }) }) socket.on('delivered', (user, messageId) => { client.get(user, function(err, socketId){ io.to(socketId).emit('delivered', messageId) }) }) socket.on('seen', (user, messageId) => { client.get(user, function(err, socketId){ io.to(socketId).emit('seen', messageId) }) }) socket.on('adduser', (username) => { client.set(username, socket.id, function(err){ socket.username = username io.sockets.emit('updateOnlineUser', username) }) }) socket.on('disconnect', function(){ client.del(socket.username) io.sockets.emit('updateOfflineUser', socket.username) }) }) } 

上面會發生什么? 它基本上建立到客戶端的連接,並且當客戶端向服務器發送addUser事件時,它將用戶存儲在radis存儲中。 當消息通過套接字傳輸時,通過發送sendChat事件,它將事件發送給另一個聊天用戶。 您還將還需要將此聊天保存到數據庫。

當用戶不想向未通過套接字連接的非活動用戶發送消息時。 您必須為消息傳遞任務實現端點。 有關更多信息,請遵循此開源項目

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM