2014-05-07 91 views
2

sails.js中有沒有一種方法,或者是一個教程,可以幫助我使用套接字(如pubnub)構建點對點聊天。使用Sails.js進行個性化聊天

我試圖使用sails.js實現個性化的聊天功能 這意味着我有多個用戶在我的應用程序中,並且用戶可以與另一個用戶聊天。因此,如果用戶A在用戶B聊天室中發送消息,則B(僅)接收消息,反之亦然。

我已經通過http://sailsjs.org/#!documentation/sockets,它的文檔給出了使用模型的例子。所以我想這不是一對一聊天,而是像用戶列表和用戶配置文件那樣改變某種東西。

所以我知道我需要使用原生socket.io代碼。我需要的是,客戶端可以爲特定通道打開一個套接字,然後每當用戶A輸入到用戶B時,該消息就存儲在數據庫中,並寫入套接字。我不知道如何在Sails中獲得這個功能。

我可以在MessagesController的index事件中編寫代碼。因此,我需要根據用戶A和用戶B的詳細信息計算頻道名稱,並將其寫入該頻道的套接字中。但我不知道如何將它寫入該特定頻道的套接字。我希望我清楚自己想要什麼。我發現這段代碼爲例:

//Code For Server 
var io = require("socket.io"); 
io.sockets.on("connection", function (sock) { 
    sock.emit("welcomeMessage", { hello: "world" }); 
} 
io.listen(80); 

//Code For Client 
var sock = io.connect('http://localhost'); 
sock.on('welcomeMessage', function (json) { 
    //Handle Event Received 
}); 

但它並沒有告訴我,我怎麼寫任何控制器我要爲通道「welcomeMessage」這個特殊的插座。像PubNub支持的東西(http://www.pubnub.com/)。

+0

我發現了以下的方法,但它看起來不太乾淨,它的純粹基於socket.io –

回答

4

您絕對可以在Sails中使用基於模型的pubsub方法進行點對點和羣聊。在Sails v0.10(npm install [email protected])中這很容易,並且在http://github.com/balderdashy/sailsChat有一個完整的示例。 Sails v0.10的Docs文件是here

訣竅使用v0.10是使用subscription contexts組合和message的活動,只有自己訂閱自己message背景,但他們訂閱了大家的update場合,它們在是用戶聊天室。這樣他們只能得到他們自己的直接信息,但他們聽到了更新(即名稱和狀態更改)給他們的朋友。

要在控制器發送一個直接消息到User實例:

User.message(userInstance, msgData); 

訂閱該實例的message上下文的任何插座客戶端將接收一個user事件具有下列數據對象:

{ 
    id: [the user ID], 
    verb: "messaged", 
    data: [the data in msgData] 
} 

如果你願意,你也可以使用low-level Sails Socket methodsjoin,leave,broadcastemit來創建一個更專門的聊天服務器,但是通過Sails的方式,您可以充分利用框架的優勢!

+0

嗨,建議使用測試版的生產應用程序? –

+0

還有什麼時候正式發佈beta版呢? –

+0

鏈接被破壞。 – theblang