2013-11-01 35 views
0

我正在創建一個實時聊天室。然而,與許多其他可用示例不同,單個聊天室只能由經過身份驗證的用戶訪問,與使用邀請的身份驗證共享該聊天室。Socket.io:當新消息添加到MongoDB數據庫時更新聊天室

步驟如下:

1)添加用戶對邀請:

app.post('/shared', function(req, res){ 
Room.findOne({_id: req.body._id}. function(err,room){ 
    new_shared = new Shared({room_id: req.body._id, user_id, req.body.user_id}); 
    new_shared.save(); 
    room.shared.push(new_shared); 
    room.save(); 
    res.send(new_shared); 
}); 
}); 

2)一旦添加到共享,用戶能夠實時在室溫添加消息僅通過認證的用戶。我們如何實現這一目標?

我想這一點: app.post( '/消息',函數(REQ,水庫,下一個){// 保存消息MongoDB中

// 發出socket函數 - 我們如何API內初始化呢?

}

3)在客戶端,我使用的骨幹JS。因此,一旦添加新消息,我應該在骨幹上調用.fetch()方法來檢索所有消息。

我對Socket.IO相對來說比較新,所以其中一些可能聽起來很愚蠢。

回答

0

從我的角度來看,mongodbexpress在您的聊天應用程序中沒有很大的目的,socket.io反而承擔了所有的負擔。

首先您應該考慮重構整個方法,您應該嘗試以下方法,以獲得乾淨的結果。

  • 使用一個簡單的單一路徑登錄用戶如/login這樣你就可以使用MongoDB的

  • 建立到後端socket.io連接驗證用戶身份,儘量滿足其處理連接的腳本

  • 由於您使用Backbone,請嘗試使用sync覆蓋,它使用socket.io代替http請求Backbone.iobind

  • 現在終於被連接到您的expressjs服務器socket.io服務器,應該處理其餘

    1. 應該使用expressjs會話認證
    2. 應該處理的連接和郵件
    3. 有一個.room內置功能在socket.io,所以沒有理由使用mongoDB和expressjs。

概括起來講,你可以跳過expressjs和利用socket.io,HTTP服務器,和MongoDB 如果您存儲在數據庫中使用的憑據

相關問題